WinAPI Sleep() 函数调用休眠的时间比预期的要长

新手上路,请多包涵

操作系统:Windows 7

当调用 WinAPI Sleep() 函数作为 Sleep(1) 时,线程实际上会休眠 15 毫秒。我在一个循环中做了 100 次,总睡眠时间是 1500 毫秒而不是 100 毫秒。

这是常见的行为,还是我应该担心我的 MOBO、CPU、Windows 安装有问题?

编辑:如果可能的话,您可以运行此代码并发布睡眠时间有多长。我让我的一个朋友运行这个,他实际上在 1 毫秒内就完成了。

 #include <iostream>
#include <ctime>
#include <Windows.h>

void test(void)
{
    std::cout << "Testing 1ms sleep." << std::endl;

    for (unsigned int i = 0; i < 10; i++)
    {
        std::clock_t startClocks = std::clock();

        Sleep(1);

        std::clock_t clocksTaken = std::clock() - startClocks;
        std::cout << "Time: " << clocksTaken << "ms." << std::endl;
    }
}

int main(void)
{
    test();

    std::cin.sync();
    std::cin.get();
    return 0;
}

EDIT2:似乎有些人得到 1ms 的原因是其他一些程序正在运行,将系统范围的计时器分辨率设置为 1ms。默认情况下,这在 Windows 7 上应该是 15.6 毫秒。

原文由 NFRCR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这是常见的行为吗

这是。

Window 的线程调度程序在时间片上工作(确切的长度取决于各种因素,包括 Windows 版本和版本)。实际上,任何非零延迟都被四舍五入到一个完整的量子。

原文由 Richard 发布,翻译遵循 CC BY-SA 3.0 许可协议

您应该检查机器的计时器分辨率。有关详细信息,请参阅 Sleep() 的 msdn 文档

原文由 Asaf 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题