Unix有各种睡眠API(睡眠,睡眠,纳米睡眠).我知道睡眠的唯一Win32功能是Sleep(),它以毫秒为单位.
我看到大多数睡眠,即使在Unix上,也会大幅度上升(即:通常为大约10ms).我在Solaris上看到过,如果你以root身份运行,你可以获得10毫秒以下的休眠时间,我知道如果启用了细粒度计时器内核参数,这也可以在HPUX上运行. Windows上是否有更精细的粒度计时器?如果是,那么API是什么?
可悲的事实是,对此没有好的答案.多媒体定时器可能是你能得到的最接近的 – 它们只允许你将周期设置为1 ms,但是(由于timeBeginPeriod)它们实际上提供了大约1 ms的精度,其中大多数其他定时器只有大约10-15 ms.一条规则.
还有很多其他候选人.乍一看,CreateWaitableTimer和SetWaitableTimer似乎是最接近的等价物,因为它们设置在100 ns的interals中.不幸的是,至少在我的测试中,你不能真正依赖于接近那个好分辨率的任何地方.从长远来看,它们可能确实提供了最好的可能性,因为它们至少允许您指定小于1毫秒的时间,即使您当前无法依赖实现来提供(接近)该分辨率.
NtDelayExecution似乎与SetWaitableTimer大致相同,只是它没有文档记录.除非您已经开始使用/测试未记录的函数,否则在我看来,CreateWaitableTimer / SetWaitableTimer只是在记录的基础上是更好的选择.
如果您正在使用线程池,则可以尝试使用CreateThreadPoolTimer和SetThreadPoolTimer.我没有对它们进行足够的测试以确定它们真正提供的分辨率,但我并不是特别乐观.
定时器队列(CreateTimerQueue,CreateTimerQueueTimer等)是MS建议用作多媒体定时器的替代品,但(至少在我的测试中)它们实际上并没有提供比Sleep更好的分辨率.