winapi – 是否有Windows等效的nanosleep?

前端之家收集整理的这篇文章主要介绍了winapi – 是否有Windows等效的nanosleep?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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更好的分辨率.

原文链接:https://www.f2er.com/windows/371765.html

猜你在找的Windows相关文章