时间函数的粒度

时间:2011-01-23 19:50:59

标签: c posix

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

3 个答案:

答案 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。