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更好的分辨率. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 有没有办法使用WScript.Shell启动使用VBScript最
- 适用于Windows或Mac上PostgreSQL的良好前端
- ffmpeg命令行,用于使用Windows 7从decklink卡捕获(并记录)7
- windows-7 – 为什么我的项目图标在Windows 7中看起来如此可
- windows-server-2016 – 慢速存储空间直接进行S2D设置
- Capslock+ 键盘党都爱的高效利器 - 让 Windows 快捷键操作更
- Microsoft AlwaysOn故障转移解决方案和Delphi
- 如何删除windows用户帐号使用C#
- windows-server-2008-r2 – Windows Server 2008 R2 CPU使用
- .net – 如何从我的DLL访问我的MainForm中的函数