sleep()函数挂起时间的偏差值会有多大

XIN SHU 0 信誉分
2024-05-22T15:52:07.53+00:00

在CPU占用率非常高的环境中(长期占用率100%)sleep()函数导致的线程挂起时间有没有可能远超设定值,比如期望sleep(30),实际线程挂起超过3秒。

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
65 个问题
C++
C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
125 个问题
Microsoft Q&A
Microsoft Q&A
使用此标记与 Microsoft 问答团队共享建议、功能请求和 bug。 Microsoft 问答团队将定期评估你的反馈,并在此过程中提供更新。
87 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jeanine Zhang-MSFT 9,351 信誉分 Microsoft 供应商
    2024-05-23T01:58:29.78+00:00

    Hello,

    欢迎来到Q&A论坛。

    根据文档:Sleep function

    暂停当前线程的执行,直到超时间隔结束。

    系统时钟以恒定的速率“滴答声”。 如果 dwMilliseconds 小于系统时钟的分辨率,则线程的睡眠时间可能小于指定的时间长度。 如果 dwMilliseconds 大于一个刻度,但小于 2,则等待时间可以是介于 1 和 2 个刻度之间的任意位置,依此而论。 若要提高睡眠间隔的准确性,请调用 timeGetDevCaps 函数来确定受支持的最小计时器分辨率,并调用 timeBeginPeriod 函数将计时器分辨率设置为其最小值。

    我认为CPU占用率不会影响sleep()函数挂起的实际时间。

    如果指定 0 毫秒,线程将放弃其时间段的剩余时间,但仍保持就绪状态。 请注意,不保证就绪线程立即运行。 因此,线程可能在睡眠间隔过后一段时间后才运行。

    Thank you.

    Jeanine