time.h中的clock()精度

mte*_*aha 7 c linux time clock

我试图计算一个函数用来运行的滴答数,并使用这样的clock()函数来计算:

unsigned long time = clock();
myfunction();
unsigned long time2 = clock() - time;
printf("time elapsed : %lu",time2);
Run Code Online (Sandbox Code Playgroud)

但问题是它返回的值是10000的倍数,我认为是CLOCK_PER_SECOND.是否存在更精确的方法或等效函数值?

我使用的是64位Ubuntu,但如果该解决方案可以在Windows和Mac OS等其他系统上运行,我更愿意.

Jon*_*ler 9

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,但增量可以较不频繁地发生(每秒100次是一个公共频率).返回值必须定义为CLOCKS_PER_SEC以秒为单位获取时间.

  • 那么它在Solaris上可用的事实是一件好事.另一个OS努力实现POSIX合规性.但是,POSIX没有强制要求该符号至少可以使用`-lrt`? (2认同)