gpt4 book ai didi

c++ - 有人可以用 Sleep(1) 解释这种有趣的行为吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:44 25 4
gpt4 key购买 nike

当被要求等待 1 毫秒时,我正在测试各种 win32 API 调用将等待多长时间。我试过了:

:: sleep (1)
::WaitForSingleObject(句柄, 1)
::GetQueuedCompletionStatus(句柄, &bytes, &key, &overlapped, 1)

我使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 检测耗时。大多数情况下,耗时约为 15 毫秒,这在整个 Internet 上都是预期和记录的。然而,在短时间内等待大约需要 2 毫秒!!!它持续发生了几分钟,但现在又回到了 15 毫秒。我没有使用 timeBeginPeriod() 和 timeEndPeriod 调用!然后我在另一台机器上尝试了相同的应用程序,等待时间一直持续约 2 毫秒!两台机器都装有 Windows XP SP2,硬件应该相同。有什么可以解释为什么等待时间相差如此之大的原因吗?时间差

最佳答案

Thread.Sleep(0) 将让任何具有相同优先级的线程执行。 Thread.Sleep(1) 将让任何具有相同或较低优先级的线程执行。

在调度程序让另一个线程执行之前,每个线程都有一个执行时间间隔。正如 Billy ONeal 所说,调用 Thread.Sleep 会将此间隔的剩余时间放弃给其他线程(受上述优先级考虑)。

Windows 在整个操作系统上平衡线程 - 而不仅仅是在您的进程中。这意味着操作系统上的其他线程也可能导致您的线程被抢占(即被中断并将剩余的时间间隔交给另一个线程)。

有一篇关于 Thread.Sleep(x) 主题的文章可能感兴趣:

Priority-induced starvation: Why Sleep(1) is better than Sleep(0) and the Windows balance set manager

关于c++ - 有人可以用 Sleep(1) 解释这种有趣的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638236/

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