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