时钟如何在Windows 7中运行?

时间:2015-03-20 08:36:50

标签: windows timer cpu clock

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

  

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

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

什么是curTimeIncrementcurTimeAdjustment以及Windows如何执行此操作?

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

仅适用于Windows 7或其他操作系统Win8,Linux等等吗?

1 个答案:

答案 0 :(得分: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毫秒,足够短,以便用户不再观察丢失的更新。