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

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

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

Windows 开发 | Windows API - Win32
社区中心 | 讨论问答网站 | 开始问答
开发人员技术 | C++
开发人员技术 | C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jeanine Zhang-MSFT 11,356 信誉分 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


你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。