gpt4 book ai didi

c - Windows sleep 功能在给定时间之前唤醒

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:18 25 4
gpt4 key购买 nike

我有一个简单的代码在我的 64 位机器上运行,Windows 7 作为标准的 Windows 应用程序:

    do {
DWORD getCurrentTick = GetTickCount();;
Sleep(20);
DWORD nextTick = GetTickCount();

printf("Tick = %d\n", nextTick - getCurrentTick);
} while(TRUE);

我知道不能保证用户模式线程 sleep 在请求的时间唤醒,但奇怪的是 Windows 在时间到来之前就唤醒了。看看我的输出:

Tick = 15
Tick = 16
Tick = 16
Tick = 31
Tick = 15
Tick = 16
Tick = 15
Tick = 16
Tick = 31

我的问题是它怎么会在我要求的时间之前醒来?我该怎么做才能使它更精确?

最佳答案

操作系统有一个特定的线程调度量程,它会影响线程等待的准确性。它默认为 15 毫秒,因此 20 秒的 sleep 将在它之前或之后结束。这是“设计使然”。

在 Win32 桌面应用程序中可以通过使用旧的 WinMM 函数来提高准确性 timeBeginPeriod (1);但这 (a) 是一个全局设置,并且 (b) 大大降低了电源管理的效率。

你应该使用 waitable timer events而不是 Sleep,但是当线程停止时,您仍将受制于线程调度量程以确保准确性。

关于c - Windows sleep 功能在给定时间之前唤醒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225812/

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