【问题标题】:Improving accuracy of Windows Sleep()提高 Windows Sleep() 的准确性
【发布时间】:2013-06-10 19:27:49
【问题描述】:

据我了解,windows 中的Sleep() 函数只能确保您的线程休眠至少指定的时间。虽然Sleep()不能保证线程只休眠超过指定时间,但是是否可以通过SetPriority()提高进程/线程的优先级来提高线程休眠时间的准确性?

【问题讨论】:

  • MSDN 上的Sleep() 文章讨论了这一点。
  • @chris 你是对的,文章确实提到了它,但只是通过“因此,线程可能要等到休眠间隔过去一段时间后才会运行。有关更多信息,请参阅调度优先级。”
  • 提高优先级将(大概!)减少因 CPU 争用而导致的任何额外延迟。但是,它不会改变刻度间隔的效果。您研究过多媒体计时器吗?

标签: c++ windows visual-studio scheduling


【解决方案1】:

MSDN article 表示如下:

如果 dwMilliseconds 大于 1 滴但小于 2,则等待时间可以介于 1 到 2 滴之间,以此类推。要提高睡眠间隔的准确性,请调用 timeGetDevCaps 函数以确定支持的最小计时器分辨率,并调用 timeBeginPeriod 函数将计时器分辨率设置为最小值。调用 timeBeginPeriod 时要小心,因为频繁调用会显着影响系统时钟、系统电源使用和调度程序。如果您调用 timeBeginPeriod,请在应用程序的早期调用一次,并确保在应用程序的最后调用 timeEndPeriod 函数。

所以优先级不会影响我可以读取的睡眠,但有可能另一个应用程序可以(导致)延迟(之间)线程切换,因此您的应用程序无论如何都会不太准确。

您可以尝试使用高分辨率计时器来尝试让您自己的纳秒精度睡眠。

【讨论】:

  • 我并不是真的要提高睡眠的精度,而是要提高准确性。例如,如果我做 Sleep(45);如果线程最终休眠 45.5 毫秒或 44.8 毫秒,我没问题,但我不希望它休眠 47 毫秒。
猜你喜欢
  • 2011-05-06
  • 2021-01-13
  • 1970-01-01
  • 2021-06-30
  • 2014-08-05
  • 2020-12-08
  • 2023-04-05
  • 2020-03-26
  • 2020-01-07
相关资源
最近更新 更多