为什么 Sleep(1) 的睡眠时间在 Windows 中似乎是可变的?

2024-04-11

上周,我需要测试一些不同的算法函数,为了让自己轻松起来,我添加了一些人工睡眠并简单地测量了时钟时间。像这样的东西:

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

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

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

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

我们在几台 PC 上对此进行了测试,显然在某些 PC 上,一次睡眠的结果确实是 1 毫秒。在其他 PC 上,该时间为 0.0156 秒。

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

这是 Windows 中的正常行为吗? Windows 是否在重新启动后的最初几个小时内处于“睡眠”状态,然后在一段时间后逐渐获得更高的睡眠粒度? 或者还有其他方面可以解释行为的变化吗?

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

有任何想法吗?

操作系统是Windows 7。


我没有听说过分辨率本身会像这样跳跃,但一般来说,睡眠的分辨率遵循任务调度程序的时钟滴答。因此默认情况下通常为 10 或 15 毫秒,具体取决于 Windows 版本。您可以通过发出以下命令手动将其设置为 1 毫秒时间开始期间 https://msdn.microsoft.com/en-us/library/dd757624(v=vs.85).aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Sleep(1) 的睡眠时间在 Windows 中似乎是可变的? 的相关文章

  • Powershell 中的反斜杠

    为什么 split 参数的字符串需要两个反斜杠 而 join 参数的字符串只需要一个反斜杠 反引号是 Powershell 中的转义字符 字符前面的反斜杠有什么作用 path C folder test unit1 testing resu
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • CUDA NSight 未随 Windows 8 上的 CUDA 5.0 安装文件一起安装? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 据我所知 Nvidia 网站上没有 Nsight Eclipse 的下载链接 它说它将由 CUDA 5 安装本机安装 但并没有随CUDA安装一起安装
  • 从 Powershell 更新计划任务脚本

    我正在尝试编写一个每天运行一次的 Powershell 脚本 它将执行的众多功能之一是确保脚本本身是最新的 我的问题是 由于我对脚本进行了版本控制 因此我需要更新从脚本中创建的计划任务 我在这里考虑了两种不同的方法 其中我也无法弄清楚 我最
  • ReadProcessMemory 上出现错误 299

    尝试从游戏内存中读取实体名称 使用 ce 检查时指针 100 正确 读取 写入浮点 整数值没有问题 32 位进程 游戏也是如此 尝试在 x64 中编译代码 但没有帮助 GetLastError 返回 nr 299 错误 部分 复制 299
  • 将目录添加到path环境变量

    我的要求是将目录之一添加到path安装我的应用程序时 Windows 中的环境变量并将其删除path使用批处理文件卸载时的环境变量 在与此相关的 stackoverflow 答案之一中 建议将目录添加到路径环境变量中 setx path C
  • 如何使用 WinAPI 读取 MessageBox 文本

    如何读取标准Win消息框 Info 的消息 Using SendMessage this HandleControl WM GETTEXT builder Capacity builder 我只能读取消息框的标题或按钮的文本 但不能读取消息
  • 如何在python中获取硬盘驱动器的序列号

    我尝试使用wmi来获取硬盘的序列号 我所做的是这样的 启动ipython并使用以下方式获取序列号 import wmi c wmi WMI for x in c Win32 PhysicalMedia print x 结果是这样的 inst
  • 在网络驱动器上安装带有 python win32 扩展的 python

    我需要保持大量 Windows XP 计算机运行相同版本的 python 并带有各种模块 其中之一是 python win32 我考虑过在所有客户端机器都安装的网络驱动器上安装python 然后只需调整客户端上的路径即可 Python 从网
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 为什么 %processor_architecture% 总是返回 x86 而不是 AMD64

    我正在尝试检索环境变量来检测系统是32位还是64位 但在64位服务器上环境变量 processor architecture 正在返回x86代替AMD64 有人对此有任何线索吗 您可能获得了错误的环境变量 如果您的应用程序是在 64 位操作
  • 在 python 2 或 python 3 中编写 csv 文件的便携式方法

    在我的 Windows 机器上 我通常在 python 2 中这样做来编写 csv 文件 import csv f open out csv wb cr csv writer f delimiter cr writerow a b c f
  • 后台地理围栏 Windows Phone 8.1 (WinRT)

    Issue 我试图在 WP8 1 WinRT 中发生地理围栏事件 进入 退出 时触发后台任务 我已经编写了一个示例应用程序来尝试让它工作 但似乎无法做到这一点 到目前为止 我已采取以下步骤来尝试让地理围栏在后台运行 检查位置功能 创建 注册
  • 如何让 shell_exec 在 IIS 6.0 上运行

    问题 我有一个 PHP 脚本 它使用shell exec运行 pdf 到文本转换器 为了简化问题 我创建了一个简短的脚本 使用shell exec只是回显的输出dir命令 当我在 Apache 服务器上运行它时 一切都按预期运行 当我切换到
  • PSExec 中的会话 ID

    Psexec 无法在远程会话上为我显示记事本 GUI 因此 我尝试获取会话 ID 如下所示 c Users Amitra Downloads PSTools gt PsExec u administrator p force 135 20
  • 使用搜索词打开 Windows 资源管理器查找窗格

    我正在尝试创建一个应用程序 该应用程序打开 Windows 资源管理器搜索功能并搜索输入了指定术语的文件 文件夹 我已经有了 Windows Vista SP1 使用 Windows 索引服务引入的 search query 命令的代码 这
  • NSIS获取参数

    to get n 0值作为字符串 不需要选项 传递给安装程序 我不太明白这个函数的工作原理是什么 GetParameters input none output top of stack replaces with e g whatever
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do
  • TRichEdit和URL高亮问题

    我正在使用当前代码在 TRichEdit 上突出显示 URL procedure TForm1 WndProc var Message TMessage var p TENLink strURL string begin if Messag

随机推荐