我处于一个奇怪的境地,我需要一些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上找不到对应物.
任何帮助表示赞赏.
大多数情况下,NTP服务器不会对系统时钟进行离散调整,它只会降低速度或加速使用adjtime,以便控制漂移率.NTP服务器可能会相当连续地执行此操作,并且每次进行调整时都不会告诉您.
即使NTP服务器在进行调整时告诉您,该信息对您也没有用.您的DVR时钟由不同的硬件驱动,因此具有不同的漂移率,并且需要在不同时间进行不同的调整.理想情况下,这将由DVR上的NTP守护程序完成!
NTP守护程序在某些情况下会导致时钟跳跃.它可能在启动时发生,或者如果时钟关闭,但这应该是一个非常罕见的事件.它可能会在执行此操作时发出日志消息,因此一种可能性是查看日志.另一种可能性是比较不时的结果clock_gettime(CLOCK_REALTIME)和clock_gettime(CLOCK_MONOTONIC)不时的结果.当您注意到这两个时钟之间的增量发生了变化时,必定是因为有人使系统时间跳跃.但要注意:结果将是紧张不安的,因为从您获取其中一个时钟到获取另一个时钟的那一刻,会有不可预测且可变的时间量过去.
根据您的需要,您可以通过忽略系统时间并仅使用clock_gettime(CLOCK_MONOTONIC)与DVR同步来实现所需.该时钟保证不会跳跃.但要小心!(再次?!哈哈!)我相信CLOCK_MONOTONIC在NTP守护进程的指导下,我可能仍会放慢速度并加速.
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |