很久以前我的程序中有一个错误.根本原因是C函数
sleep(60);
Run Code Online (Sandbox Code Playgroud)
在极少数情况下会睡不到60秒.或者该函数确实导致线程睡眠时间超过60秒,但是操作系统自动更改了时钟(这似乎很可能只是因为错误发生在上面XX::00::00
),也就是它很少表现出来,而且只在"圆形小时"(睡眠shoudl已经结束> xh0m0s,结束了x-1h59m59.99*s
).
然后我的项目经理咆哮他怎么说了几百万次我们应该只使用计时器,而不是睡觉.从那时起,我接受了定时器比睡眠更准确的概念(),但现在我觉得我应该要求一些更权威的来源.所以:
BTW OS是Linux,但如果可能的话我会关心一般的答案.
没有通用的答案,原因很简单,C 或 C++ 标准中没有任何内容提供使应用程序进入睡眠状态的能力。因此,讨论本质上是依赖于操作系统的。
unixsleep()
函数的粒度较粗。还有usleep()
和nanosleep()
which 具有更细的粒度。功能select()
还可用于使应用程序进入睡眠状态。只需指定超时且不指定文件描述符。
sleep()
注意#1: 、usleep()
、之间的相互作用nanosleep()
、 计时器和警报
注意#2:不要指望这些机制中的任何一个具有原子钟的精度。