CLOCKS_PER_SEC在不同操作系统中的行为
Behaviour of CLOCKS_PER_SEC in different Operating Systems
我正在运行一个cpp代码,但有一件事我注意到,在windows 7上,C++代码中的CLOCKS_PER_SEC给出1000,而在linux fedora 16上给出1000000。有人能为这种行为辩解吗?
什么是正当的?CLOCKS_PER_SEC
是实现定义的,并且可以什么都可以。All it指示函数返回的单位CCD_ 2。它甚至没有表明clock()
:Posix的分辨率要求它为1000000,而不管实际分辨率如何。如果Windows返回1000,这可能不是实际的分辨率任何一个(我发现我的Linux盒子的分辨率是10ms,我的Windows盒子是15ms。)
基本上,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
- 在C++中设置基于操作系统的文件路径
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- WideCharToMultiByte在英语操作系统上不转换日语
- 如何在 Windows 操作系统中在 geany 中安装插件
- 操作系统平台支持宏和提升库
- 从utsname找出Linux操作系统名称
- 为什么 free() 函数不将内存返回给操作系统?
- 我可以让编译器忽略特定于操作系统的方法吗?
- 有没有办法获取用户操作系统的ANSI转义码?
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 如何应用 printers.py 修改?(Linux操作系统)
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- 操作系统如何检测进程崩溃
- 检查操作系统兼容性
- 操作系统 (Linux) 在使用 boost::asio::generic::raw_protocol::socket
- 检测到由于操作系统内存不足而导致子进程终止
- 在Windows 10操作系统中扩展控制台
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll