如何保证精确的线程睡眠间隔?

Vik*_*tor 1 c++ condition-variable c++11

通常,如果我想模拟某些工作或等待确切的时间间隔,我会使用condition_variable::wait_for或者最坏的情况thread::this_thread::sleep_for.但condition_variable 文档说明wait_forwait_until方法可能会阻止比请求更长的时间.

由于调度或资源争用延迟,此函数可能会阻塞超过timeout_duration.

可以保证多少精确的等待间隔?

UPDATE

我可以不用到达condition_variable吗?

Yak*_*ont 7

你不能做这个.

为了得到这样的确切保证,您需要一个实时操作系统.

C++不保证您使用的是实时操作系统.

因此它提供了典型的非RTOS提供的保证.

请注意,在RTOS上编程还有其他复杂问题,远远超出了本问题的范围.

在实践中,当人们真正想要细粒度的时序控制时(例如,他们使用每帧或每扫描线缓冲器或类似物,或音频缓冲器,或其他任何东西),做的一件事就是检查时间是否短暂,如果是这样旋转等待.如果时间较长,他们等待的时间少于他们想要等待的时间,然后唤醒并旋转.

这也不能保证工作,但几乎适用于所有情况.

在RTOS上,平台可以提供您想要的原语.这些不在标准C++的范围之内.没有典型的桌面操作系统是我所知道的RTOS.如果您正在为战斗机的控制硬件或类似设备编程,您可能正在使用RTOS进行编程.

我希望你不是在编写战斗机控制软件并在堆栈溢出时问这个问题.