CLOCKS_PER_SEC在不同操作系统中的行为

时间:2012-09-03 08:11:57

标签: c++ linux windows-7 fedora16

我正在运行一个cpp代码,但有一件事我注意到在Windows 7上,C ++代码中的CLOCKS_PER_SEC给出1000而在linux fedora 16上它给出了1000000.有人可以证明这种行为吗?

2 个答案:

答案 0 :(得分:4)

有什么理由? CLOCKS_PER_SEC是实现定义的,可以 做任何事。它全部表示该函数返回的单位 clock()。它甚至没有表明clock():Posix的分辨率 无论实际分辨率如何,都要求它为1000000。如果 Windows返回1000,这可能不是实际的分辨率 无论是。 (我发现我的Linux机箱的分辨率为10毫秒,我的Windows机箱的分辨率为15毫秒。)

答案 1 :(得分:2)

基本上clock()函数的实现对于不同的操作系统有一些余地。在Linux Fedora上,时钟更快。它每秒可以达到100万次。

此时钟标记与CPU的时钟速率不同,位于不同的抽象层上。 Windows尝试使时钟滴答数等于毫秒的数量。

  

此宏扩展为表示时钟数的表达式   由函数时钟返回的秒钟。

     

按此表达式计算时钟滴答数会产生数字   几秒钟。

     

CLK_TCK是此宏的过时别名。

参考:http://www.cplusplus.com/reference/clibrary/ctime/CLOCKS_PER_SEC/

您还应该知道Windows实现不适用于真正的实时应用程序。 1000滴答时钟是通过将硬件时钟除以2的幂来得出的。这意味着它们实际上获得了1024个滴答时钟。要将其转换为1000个刻度时钟,Windows将跳过某些刻度,这意味着某些刻度比其他刻度慢!

通常使用单独的硬件时钟(不是CPU时钟)进行定时。参考:http://en.wikipedia.org/wiki/Real-time_clock