一尘不染

clock()time.h的精度

linux

我正在尝试计算函数用于运行的滴答声的数量,并使用clock()像这样的函数来这样做:

unsigned long time = clock();
myfunction();
unsigned long time2 = clock() - time;
printf("time elapsed : %lu",time2);

但是问题在于它返回的值是10000的倍数,我认为是CLOCK_PER_SECOND。有没有一种方法或等效函数值更精确?

我使用的是64位Ubuntu,但是希望该解决方案可以在Windows和Mac OS等其他系统上运行。


阅读 785

收藏
2020-06-03

共1个答案

一尘不染

POSIX中有许多更准确的计时器。

  • gettimeofday()-正式淘汰,但可广泛使用;微秒的分辨率。
  • clock_gettime()- 纳秒级分辨率的替代品gettimeofday()(但不一定广泛可用;在Solaris的旧版本中,需要-lposix4链接)。

还有其他亚秒级计时器,它们或多或少具有上古性,可移植性和分辨率,包括:

  • ftime() -毫秒分辨率(在POSIX 2004中标记为“旧版”;在POSIX 2008中未标记)。
  • clock()-您已经知道。请注意,它测量的是CPU时间,而不是经过的时间(挂钟)。
  • times()- CLK_TCKHZ。请注意,这将测量父进程和子进程的CPU时间。

不要使用ftime()times()除非有没有好。最终的后备但不满足您的即时要求是

  • time() -一秒钟的分辨率。

clock()函数以表示,单位为CLOCKS_PER_SEC,POSIX
要求该值为1,000,000,但是增量的发生频率可能​​较低(每秒100次是一个公共频率)。返回值必须定义为CLOCKS_PER_SEC以秒为单位获取时间。

2020-06-03