【问题标题】:How will the Windows C/Sleep() function operate during clock drift?Windows C/Sleep() 函数在时钟漂移期间如何运行?
【发布时间】:2011-03-04 01:29:50
【问题描述】:

如果我运行 Sleep(10000) 之类的东西,并且在此期间系统时钟发生变化,那么线程是否仍会休眠 10 秒的挂钟时间,还是更少或更多? IE。 Sleep() 函数是否将毫秒转换为硬件滴答声?

【问题讨论】:

    标签: c++ c windows sleep clock


    【解决方案1】:

    Sleep() 独立于挂钟时间。它基于用于线程调度的相同计时器。

    但是,由于系统时钟的频率以及您实际被安排在超时后运行的时间,您通常不会恰好睡 10 秒。

    【讨论】:

    • 如果它们是独立的,那么如果在午夜(00:00:00)我做睡眠(10000),五秒后(00:00:05),我将系统时钟重置为午夜(00:00:00),这是否意味着在 Sleep(10000) 唤醒之前将经过 15 秒的挂钟时间?该机制与 Windows 时间服务实现的漂移不同吗?
    • 睡眠不使用 WTS。它基于系统时钟滴答和滴答频率。系统时钟的这种用法不应与墙上的时钟混淆。
    【解决方案2】:

    据我所知,它在任何地方都没有记录,但是是的,您可以放心地假设是这样。如果不这样做,那将是非常具有破坏性的,日光转换每年发生两次。 记录了等效的内核函数 KeDelayExecutionThread 的 Interval 参数:

    以 100 纳秒为单位指定等待发生的绝对时间或相对时间。负值表示相对时间。绝对过期时间跟踪系统时间的任何变化;相对过期时间不受系统时间变化的影响。

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 2022-07-09
      • 2013-12-15
      • 2016-06-06
      • 2020-06-05
      • 2016-02-15
      • 2016-05-28
      • 2017-04-23
      • 2013-01-15
      相关资源
      最近更新 更多