提高Windows Sleep()的准确性

时间:2013-06-10 19:27:49

标签: c++ windows visual-studio scheduling

我理解Windows中的Sleep()函数只能确保您的线程至少指定的时间内休眠。虽然Sleep()无法确保线程只睡眠时间超过指定时间,但是通过使用SetPriority()来提高进程/线程的优先级,是否可以提高线程休眠时间的准确性?

1 个答案:

答案 0 :(得分:1)

MSDN article说明如下:

  

如果dwMilliseconds大于一个tick但小于2,则等待可以是一到两个滴答之间的任何值,依此类推。要提高休眠间隔的准确性,请调用timeGetDevCaps函数以确定支持的最小计时器分辨率,并调用timeBeginPeriod函数将计时器分辨率设置为最小值。调用timeBeginPeriod时请小心,因为频繁的调用会显着影响系统时钟,系统电源使用和调度程序。如果你调用timeBeginPeriod,请在应用程序的早期调用它一次,并确保在应用程序的最后调用timeEndPeriod函数。

因此优先级不会影响睡眠,但是可能另一个应用程序可以(导致)延迟(在两者之间)进行线程切换,因此无论如何你的应用程序都会不那么精确。

您可以尝试使用高分辨率计时器来尝试进行自己的纳秒级精确睡眠。