为什么休眠(1)的休眠时间在Windows中似乎是可变的? [英] Why is the sleep-time of Sleep(1) seems to be variable in Windows?

查看:13
本文介绍了为什么休眠(1)的休眠时间在Windows中似乎是可变的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上周我需要测试一些不同的算法函数,为了方便自己,我添加了一些人工睡眠,并简单地测量了时钟时间。大概是这样的:

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

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

今天早上,由于新的Microsoft Windows热修复程序,我不得不重新启动电脑,令我惊讶的是,睡眠(1)花费的时间不再是1毫秒,而是大约0.0156秒。

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

我们在几台PC上测试了这一点,显然在一些PC上,一次睡眠的结果确实是1ms。在其他PC上为0.0156秒。

然后,突然,过了一段时间,睡眠时间降到了0.01秒,然后一个小时后又回到了0.001秒(1ms)。

这是Windows中的正常行为吗? Windows是不是在重启后的最初几个小时就"昏昏欲睡",然后在一段时间后逐渐获得更高的睡眠粒度? 或者,有没有其他方面可以解释这种行为的变化?

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

有什么想法吗?

操作系统为Windows 7。

推荐答案

我没有听说过分辨率本身就像这样跳跃,但一般来说,睡眠的分辨率遵循任务调度器的时钟节拍。因此,默认情况下通常为10或15毫秒,具体取决于Windows的版本。您可以通过发出timeBeginPeriod将其手动设置为1 ms。

这篇关于为什么休眠(1)的休眠时间在Windows中似乎是可变的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆