【问题标题】:How does the clock work in Windows 7?Windows 7 中的时钟如何工作?
【发布时间】:2015-05-23 14:52:45
【问题描述】:

我在某处读过这个答案,但我不完全理解:

我了解 Windows 会在每个 curTimeIncrement 递增时钟 (156001 100 纳秒) 的值为 curTimeAdjustment (156001 +-N)。但是,当使用 GetSystemTime 读取时钟时,例程是否会在 156001 纳秒*100 间隔内插入到 产生指定的精度?

谁能给我解释一下?

什么是curTimeIncrementcurTimeAdjustment,Windows 如何做到这一点?

这对获取准确时间有什么影响?

这仅适用于 Windows 7 还是其他操作系统 Win8、Linux 等?

【问题讨论】:

    标签: windows timer cpu clock


    【解决方案1】:

    指的是Windows上GetSystemTimeAdjustment()返回的值。它告诉您如何调整时钟以赶上或减慢以匹配实时时间。 “真实”是美国 NIST 这样的机构所保存的时间,他们有一个原子钟,其精度远远高于您机器中内置的时钟。

    您机器中的实时时钟 (RTC) 的准确性有限,这是保持硬件价格合理的副作用,它往往每个月都会偏离几秒钟。因此操作系统会定期通过 Internet 联系时间服务器,time.windows.com 是 Windows 上的常见选择。它根据原子钟预言告诉它当前的实时时间。

    RTC 的不准确性并不是漂移的唯一来源,有时会故意更改实时时间。添加一个闰秒,使时钟与地球的真实自转重新同步。当天(24 x 60 x 60 秒)有点太短了,地球的自转速度每世纪减慢约 1.5 毫秒,并且由于大风暴和地震而通常不规则。插入的闰秒弥补了这一点。最近的一个是在今年 6 月 30 日 23:59:60 UTC 添加的。 60 不是错字:)

    之前的那个是在 2012 年 6 月 30 日。有点臭名昭著的是,闰秒的插入导致许多 Linux 服务器崩溃。谷歌“Linux 闰秒错误”以了解更多信息。

    这通常是 GetSystemTimeAdjustment() 下的机制试图避免的,立即使用从时间服务器获得的值更改时间是非常危险的。软件通常有一个硬性假设,即时间会稳步前进,而如果没有,则会出现行为不端。就像时钟拨回后观察同一时间两次一样。或者由于闰秒插入而观察到 23:59:60 UTC 之类的假时间。

    所以它没有,时钟在时钟滴答中断处每秒更新 64 次。或者换句话说,1 / 64 = 0.015625 在滴答之间,156250 以纳秒*100 为单位。如果需要进行时钟调整,那么它不仅会增加 156250,还会稍微增加或减少。从而缓慢地将时钟重新同步到真实时间并避免扰乱软件。

    这当然会对绘制时钟的软件产生令人不快的副作用。一个明显的方法是使用一秒计时器。但有时那不是一秒钟,也不是在进行时间调整的时候。然后奈奎斯特的采样定理开始发挥作用,有时计时器滴答根本不会更新时钟,或者它会跳过一秒钟。值得注意的是,这并不是难以保持绘制时钟准确的唯一原因,计时器通知本身也总是延迟。软件无法立即执行的副作用。事实上,这更可能是麻烦的根源,时钟调整只是锦上添花,更容易理解。

    尴尬的问题,奈奎斯特先生告诉我们,您必须更频繁地采样以消除不良混叠效应。因此,一种解决方法是将计时器设置为一个小的间隔,例如 15 或 31 毫秒,足够短,让用户不再观察到丢失的更新。

    【讨论】:

    • 嗯。这意味着如果软件正在处理音乐,您根本不能依赖系统时钟(专业人士会听到节奏的变化)。可能音乐不是唯一对变化率敏感但对每月第二次错误不敏感的领域。
    • 当然,这就是它在硬件中完成的原因。您的声卡(这些天是芯片)用自己的时钟来处理它。它没有调整,它只需要稳定,不准确。
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 2015-03-07
    • 2013-10-21
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2011-08-11
    • 2012-06-25
    相关资源
    最近更新 更多