有没有办法检查POSIX提供的gettimeofday()函数的粒度?
答案 0 :(得分:3)
而不是gettimeofday()
,请考虑使用clock_gettime()
(指定CLOCK_REALTIME
时钟)。这也是POSIX,并支持clock_getres()
函数来获得分辨率。
答案 1 :(得分:1)
在紧密循环中调用它,注意当前值与前一个值之间的差异。如下所示:
#include <stdio.h>
#include <sys/time.h>
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一或两微秒,数百或数千的异常值可能是由于任务切换)。
答案 2 :(得分:-1)
获取gettimeofday()分辨率的当前posix方法是
#include <unistd.h>
long ticks_per_sec = sysconf(_SC_CLK_TCK);
在较旧的posix版本中(不确定何时发生更改),值CLOCKS_PER_SEC为#defined。