与睡眠相比,定时器具有更好的精度()

NoS*_*tAl 5 c c++ sleep timer

很久以前我的程序中有一个错误.根本原因是C函数

sleep(60);
Run Code Online (Sandbox Code Playgroud)

在极少数情况下会睡不到60秒.或者该函数确实导致线程睡眠时间超过60秒,但是操作系统自动更改了时钟(这似乎很可能只是因为错误发生在上面XX::00::00),也就是它很少表现出来,而且只在"圆形小时"(睡眠shoudl已经结束> xh0m0s,结束了x-1h59m59.99*s).
然后我的项目经理咆哮他怎么说了几百万次我们应该只使用计时器,而不是睡觉.从那时起,我接受了定时器比睡眠更准确的概念(),但现在我觉得我应该要求一些更权威的来源.所以:

  1. 定时器比睡眠更准确吗?
  2. (相关)他们是在内部深处(在操作系统级别上)使用不同的方法实现的吗?
    我知道定时器用来做回调,睡眠只是延迟当前线程的执行,我在谈论延迟执行部分的实现.

BTW OS是Linux,但如果可能的话我会关心一般的答案.

Dav*_*men 2

没有通用的答案,原因很简单,C 或 C++ 标准中没有任何内容提供使应用程序进入睡眠状态的能力。因此,讨论本质上是依赖于操作系统的。

unixsleep()函数的粒度较粗。还有usleep()nanosleep()which 具有更细的粒度。功能select()还可用于使应用程序进入睡眠状态。只需指定超时且不指定文件描述符。

sleep()注意#1: 、usleep()、之间的相互作用nanosleep()、 计时器和警报

注意#2:不要指望这些机制中的任何一个具有原子钟的精度。