gpt4 book ai didi

windows - 为什么 Sleep(1) 的 sleep 时间在 Windows 中似乎是可变的?

转载 作者:可可西里 更新时间:2023-11-01 09:41:45 48 4
gpt4 key购买 nike

上周我需要测试一些不同的算法功能,为了让自己更轻松,我添加了一些人工 sleep 并简单地测量了时钟时间。像这样:

start = clock();
for (int i=0;i<10000;++i)
{
...
Sleep(1);
...
}
end = clock();

由于 Sleep 的参数以毫秒为单位表示,我预计总挂钟时间约为 10 秒(由于算法的缘故要高很多,但现在这并不重要),这确实是我的结果。

今天早上,由于新的 Microsoft Windows 修补程序,我不得不重新启动我的 PC,令我惊讶的是,Sleep(1) 不再需要 1 毫秒,而是大约 0.0156 秒。

所以我的测试结果完全搞砸了,因为总时间从 10 秒增加到大约 156 秒。

我们在多台 PC 上对此进行了测试,显然在某些 PC 上,一次 sleep 的结果确实是 1 毫秒。在其他 PC 上是 0.0156 秒。

然后,突然,过了一会儿,Sleep 的时间下降到 0.01 秒,然后一个小时后又回到 0.001 秒(1 毫秒)。

这是 Windows 中的正常行为吗?Windows 是否在重新启动后的前几个小时“困倦”,然后在一段时间后逐渐获得更高的 sleep 粒度?或者是否有任何其他方面可以解释行为的变化?

在我所有的测试中,没有其他应用程序同时运行(或者:至少不占用任何 CPU)。

有什么想法吗?

操作系统是 Windows 7。

最佳答案

我没听说过分辨率会像这样自己跳来跳去,但一般来说, sleep 的分辨率会跟随任务调度程序的时钟滴答。因此默认情况下通常为 10 或 15 毫秒,具体取决于 Windows 的版本。您可以通过发出 timeBeginPeriod 将其手动设置为 1 毫秒.

关于windows - 为什么 Sleep(1) 的 sleep 时间在 Windows 中似乎是可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019122/

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