使用SetSystemTimeAdjustment重置时钟速率,而不使用时间服务器

时间:2013-09-10 16:08:13

标签: c# c++ windows winapi clock

问题:

在关闭外部时钟同步的计算机上,如何将时钟重置为正常速率?那我应该将SetSystemTimeAdjustment函数的timeAdjustment参数设置为?

说明

我的目标是在数千台机器上同步时钟,使时钟始终向前发展。 如果由于某种原因需要设置时钟,则时钟速率会降低。

我观察到我的工作站使用函数getSystemTimeAdjustment提供了非常不同的timeAdjustment值。 有时我得到155854(100ns的#),有时156002有时是其他值。 是的,我知道这是15.58ms而不是15.60ms,但问题仍然存在。 到目前为止,我最好的猜测是谁负责我的工作站的时钟调整(域控制器?)根据时钟漂移设置这些值,而时钟漂移又取决于许多其他物理因素。

在未连接到域控制器且与Internet时间服务器禁用同步的计算机上,我一直在观察以秒为单位测量的时钟漂移 阅读Jeff's article on PC clocks后10分钟 让我觉得这样的漂移根本不是什么奇怪的事。

如果漂移是恒定的,我可以在开始改变时钟速率之前恢复该值(这是一个很好的近似值),但时钟漂移不是恒定的。

主要用C#编码。也会接受C ++中的答案。

1 个答案:

答案 0 :(得分:1)

这篇博客文章解释了Windows时钟背后的奥秘。在我这时服务器开始听起来不错。

http://www.mathpirate.net/log/2010/03/20/temporal-mechanics-changing-the-speed-of-time-part-ii/