时间函数的粒度

有没有办法检查POSIX提供的gettimeofday()函数的粒度?

在紧密循环中调用它,注意当前值与前一个值之间的差异。 类似于以下内容:

#include  #include  int main() { struct timeval timevals[2]; int cur = 0; while (1) { gettimeofday(&timevals[cur], NULL); int diff = timevals[cur].tv_usec - timevals[!cur].tv_usec; if (diff) printf("%d\n", diff); cur = !cur; } } 

在我的系统上,似乎粒度大约为2 usec(大约50/50一或两微秒,exception数百或数千,可能是由于任务切换)。

请考虑使用clock_gettime() (指定CLOCK_REALTIME时钟),而不是gettimeofday() )。 这也是POSIX,并支持clock_getres()函数来获取分辨率。

获取gettimeofday()分辨率的当前posix方法是

 #include  long ticks_per_sec = sysconf(_SC_CLK_TCK); 

在较旧的posix版本中(不确定何时发生更改),值CLOCKS_PER_SEC为#defined。