时间函数的粒度
有没有办法检查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。