使用gettimeofday和localtime准确的时间戳

时间:2011-05-05 16:05:59

标签: c++ c timing localtime gettimeofday

我正在尝试通过gettimeoday和localtime监控跨多个应用程序和数据路径的系统时间。在这个例子中,我想在我的代码运行之前获取系统时间(微秒精度)。我现在这样做:

#include <stdio.h>
#include <sys/time.h>

struct timeval tv;
struct timezone tz;
struct tm *tm;

**code I don't care about**

gettimeofday(&tv, NULL);
tm=localtime(&tv.tv_sec);

**code to watch**    

printf(" %d:%02d:%02d %ld \n", tm->tm_hour, tm->tm_min,
            tm->tm_sec, tv.tv_usec);

根据我的理解,本地时间调用肯定会产生一些开销,并且可能会导致准确性下降。我可能在这方面完全错了,但是在我的代码完成之后,我应该等待本地时间吗?我假设本地时间只是对gettimeofday的结果进行半昂贵的转换,因此它应该放在printf语句之前。

1 个答案:

答案 0 :(得分:2)

如果你真的需要微秒精度,是的。如果localtime在不到一微秒的时间内执行,我会感到非常惊讶。但是如果gettimeofday具有微秒分辨率,即使实际的计时器确实(非常不可能),我也会感到惊讶,从系统返回时的上下文切换可能需要超过一微秒(并且可能会更长)比调用localtime)。事实是,除了直接访问特殊硬件外,你无法获得接近微秒分辨率的任何地方。