我处于一种奇怪的境地,我需要一些NTP时间调整方向。
我有一台运行NTP守护程序的PC(Red Hat),这台PC通过我的LAN上的Stratum 2时间服务器调整时间。
我的电脑也通过串口(RS-232)连接到DVR。此设备和我的PC时间需要同步。
然而,经过一段时间后,我的PC和DVR的时钟开始逐渐消失,所以我需要一种在PC上检测时间调整的方法,并对DVR应用相同的调整。
有没有办法做到这一点?
我希望找到一种在操作系统级别订阅某种事件的方法,以便在Red Hat上更改系统时钟。 (如果RedHat完全可以的话)
似乎可以在Windows上使用SystemEvents.TimeChanged事件,但我在使用C ++的RedHat上找不到对应物。
感谢任何帮助。
答案 0 :(得分:6)
大多数情况下,NTP服务器不会对系统时钟进行离散调整,只会使用adjtime
减慢速度或将其加速,以便控制漂移率。 NTP服务器可能会相当连续地执行此操作,并且每次进行调整时都不会告诉您。
即使NTP服务器在进行调整时告诉您,该信息对您无用。您的DVR时钟由不同的硬件驱动,因此具有不同的漂移率,并且需要在不同时间进行不同的调整。理想情况下,这可以通过DVR上的NTP守护程序来完成!
NTP守护程序在某些情况下会导致时钟跳转。它可能在启动时发生,或者如果时钟关闭,但这应该是一个非常罕见的事件。它可能会在执行此操作时发出日志消息,因此一种可能性是查看日志。另一种可能性是不时比较clock_gettime(CLOCK_REALTIME)
和clock_gettime(CLOCK_MONOTONIC)
的结果。当您注意到这两个时钟之间的增量发生了变化时,必定是因为有人使系统时间跳跃。但要注意:结果将是紧张不安的,因为从您获取其中一个时钟到获取另一个时钟的那一刻,会有不可预测且可变的时间流逝。
根据您的需要,您可以通过忽略系统时间并仅使用clock_gettime(CLOCK_MONOTONIC)
与DVR同步来实现所需。该时钟保证不会跳跃。但要小心! (再次?!哈哈!)我相信CLOCK_MONOTONIC
可能仍会在NTP守护进程的指导下减速并加速。
答案 1 :(得分:0)
由于从Microsoft更改API以来似乎还没有真正解决此问题的方法,所以我添加了feature request。如果您遇到同样的问题,请投票。