时钟如何在Windows 7中运行?

问题描述 投票:12回答:1

我已经在某处读过这个答案,但我完全不明白:

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

有人可以试着向我解释一下吗?

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

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

这是真的只适用于Windows 7或其他操作系统Win8,Linux等等吗?

windows timer cpu clock
1个回答
30
投票

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

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

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

之前的那个是在2012年6月30日。有点臭名昭着,闰秒的插入使许多Linux服务器崩溃了。谷歌“Linux闰第二个bug”来了解更多信息。

这通常是GetSystemTimeAdjustment()下面的机制试图避免的,立即用时间服务器获得的值来改变时间是非常危险的。软件通常有一个很难的假设,即时间稳步前进,而不是时间不当。就像在时钟回退时两次观察同一时间一样。或者由于闰秒插入而观察到像UTC时间23:59:60这样的假时间。

所以它没有,时钟在时钟滴答中断每秒更新64次。或者换句话说,1/64 = 0.015625之间的刻度,156250(纳秒)* 100个单位。如果需要进行时钟调整,那么它不仅仅是添加156250,而是稍微增加或减少。因此,慢慢地将时钟重新同步到真实时间并避免使软件瘫痪。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.