我已经在某个地方看过这个答案,但我完全不明白:
我知道Windows使用curTimeAdjustment(156001 + – N)的值每curTimeIncrement(156001 100纳秒)递增时钟。 但是,当使用GetSystemTime读取时钟时,例程会在156001纳秒* 100的时间间隔内进行插值以产生指示的精度?
有人可以试着向我解释吗?
什么是curTimeIncrement
, curTimeAdjustment
以及Windows如何做到这一点?
这对于获得准确的时间有什么影响?
对于Windows 7或其他操作系统Win8,Linux等,这是真的吗?
它指的是在Windows上由GetSystemTimeAdjustment()返回的值。 它告诉你如何调整时钟以赶上或减速以匹配实时。 “真实”是美国NIST等机构所保存的时间,它们的原子钟精确度远远高于机器内置的时钟。
您的机器中的实时时钟(RTC)精度有限,保持硬件负担的副作用,每月往往会减少几秒钟。 因此,操作系统定期通过Internet与时间服务器联系,time.windows.com是Windows上的常用选择。 它根据原子钟预言告诉它当前的实时。
RTC的不准确性不是漂移的唯一来源,有时实时更改是故意的。 添加一个闰秒来重新同步时钟与地球的真实旋转。 当天(24×60×60秒)有点太短,地球自转速度每个世纪减慢〜1.5毫秒,由于大风暴和地震,总体上是不规则的。 插入的闰秒弥补了这一点。 最近一次是在今年6月30日23:59:60 UTC加入的。 60不是错字:)
之前的那个是在2012年6月30日。有点臭名昭着,闰秒的插入让很多Linux服务器崩溃。 谷歌“Linux闰秒”了解更多信息。
一般来说GetSystemTimeAdjustment()下面的机制试图避免的是,使用从时间服务器获得的值立即改变时间是非常危险的。 软件经常有一个很难的假设,即时间不断前进,在没有时间的时候会出现不正常的行为。 就像在时钟倒退两次的同时观察一样。 或者由于闰秒的插入,观察UTC时间23:59:60这样的虚假时间。
所以不会,在时钟滴答中断时钟每秒更新64次。 换句话说,蜱之间的1/64 = 0.015625,156250纳秒* 100单位。 如果需要进行时钟调整,那么不仅仅是增加156250,而是稍微增加或减少。 从而使时钟慢慢地重新同步到真实的时间,避免软件的篡改。
这当然对绘制时钟的软件有不愉快的副作用。 一个明显的方法是使用一秒计时器。 但是有时候这不是第二次,而是在进行时间调整的时候。 奈奎斯特的采样定理开始发挥作用,有时一个计时器滴答不会更新时钟或跳过一秒钟。 值得注意的是,这不是唯一的原因,因为它很难保持一个准确的时钟,计时器通知本身也总是延迟。 软件的副作用无法立即执行。 事实上,这是更可能的麻烦来源,时钟调整只是锦上添花,更容易理解。
尴尬的问题,奈奎斯特先生告诉我们,你必须更频繁地采样,以消除不良的混叠效应。 所以一个解决方法是设置一个很小的时间间隔,比如15或者31毫秒,这样用户就不会再观察到丢失的更新了。