加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – 是否有Windows等效的nanosleep?

发布时间:2020-12-13 20:30:49 所属栏目:Windows 来源:网络整理
导读:Unix有各种睡眠API(睡眠,睡眠,纳米睡眠).我知道睡眠的唯一Win32功能是Sleep(),它以毫秒为单位. 我看到大多数睡眠,即使在Unix上,也会大幅度上升(即:通常为大约10ms).我在Solaris上看到过,如果你以root身份运行,你可以获得10毫秒以下的休眠时间,我知道如果启
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更好的分辨率.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读