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