gpt4 book ai didi

winapi - 是否有相当于 nanosleep 的 Windows?

转载 作者:行者123 更新时间:2023-12-04 10:56:21 25 4
gpt4 key购买 nike

Unix 有多种 sleep API(sleep、usleep、nanosleep)。我所知道的唯一用于 sleep 的 Win32 函数是 Sleep(),它以毫秒为单位。

我看到大多数 sleep ,即使是在 Unix 上,都会显着地向上取整(即:通常约为 10 毫秒)。我已经看到,在 Solaris 上,如果您以 root 身份运行,您可以获得 10 毫秒以下的 sleep 时间,而且我知道这在 HPUX 上也是可能的,前提是启用了细粒度计时器内核参数。 Windows 上是否有更细粒度的计时器?如果有,API 是什么?

最佳答案

可悲的事实是,对此没有好的答案。多媒体定时器可能是你能得到的最接近的——它们只允许你将周期设置为 1 毫秒,但是(感谢 timeBeginPeriod)它们实际上提供了大约 1 毫秒的精度,而大多数其他定时器只有大约 10-15 ms 作为规则。

还有很多其他候选人。乍一看,CreateWaitableTimerSetWaitableTimer可能看起来最接近,因为它们设置在 100 ns 内部。不幸的是,至少在我的测试中,您不能真正依赖于接近该分辨率的任何地方。从长远来看,它们可能确实提供了最好的可能性,因为它们至少可以让您指定小于 1 毫秒的时间,即使您目前无法依赖实现来提供(任何接近)该分辨率。
NtDelayExecution好像和SetWaitableTimer差不多除了它是无证的。除非您打算使用/测试未记录的函数,否则在我看来 CreateWaitableTimer/SetWaitableTimer仅在记录的基础上是更好的选择。

如果您使用线程池,您可以尝试使用 CreateThreadPoolTimerSetThreadPoolTimer相反。我还没有对它们进行足够的测试,无法确定它们真正提供的分辨率,但我并不特别乐观。

计时器队列( CreateTimerQueueCreateTimerQueueTimer 等)是 MS 推荐的多媒体计时器替代品,但(至少在我的测试中)它们并没有真正提供比 Sleep 更好的分辨率.

关于winapi - 是否有相当于 nanosleep 的 Windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com