C++ 标准时间同步

C++ 标准时间同步,c++,c++11,chrono,C++,C++11,Chrono,我需要通过网络发送一些带有时间戳的数据,这次应该有很高的精度。查看std::chrono时钟,我发现std::chrono::*\u clock::now()返回的时间点取决于时钟的历元。我没能找出每个时钟中使用了哪个历元,以及在通过wia网络发送时哪个历元可以安全使用。例如,在windows上,高分辨率时钟是包装式的QueryPerformanceCounter,它具有很好的精度,但我认为,它对于网络任务来说没有时间戳的用处 所以问题是如何在网络上“同步”高分辨率时钟?std::chrono:

我需要通过网络发送一些带有时间戳的数据,这次应该有很高的精度。查看
std::chrono
时钟,我发现
std::chrono::*\u clock::now()
返回的
时间点取决于时钟的历元。我没能找出每个时钟中使用了哪个历元,以及在通过wia网络发送时哪个历元可以安全使用。例如,在windows上,高分辨率时钟是包装式的
QueryPerformanceCounter
,它具有很好的精度,但我认为,它对于网络任务来说没有时间戳的用处


所以问题是如何在网络上“同步”高分辨率时钟?

std::chrono::system\u clock
的时代目前尚未确定。然而,自1970-01-01 00:00:00 UTC以来,它是一种便携式时间测量方法,忽略了闰秒。这与我们所说的是一致的

我目前正在工作。我从
std::chrono::system\u clock
的实施者那里得到了私人的、非官方的保证,他们在此期间不会改变他们现有的做法

另外两个
std
定义的时钟:
高分辨率时钟
,和
稳定时钟
,没有可移植定义的年代


请注意,
系统时钟
,尽管它有一个(事实上)可移植的历元,但没有可移植的精度。在clang/libc++上,精度为微秒。在gcc上,精度为纳秒,在Windows上,精度为100ns。因此,您可以
time\u point\u cast(system\u clock::now())
来获得可移植的精度。

如果您想要“高精度”(您应该指定更好的)同步,首先需要使您的所有网络设备定期与同一NTP服务器同步。您需要配置机器,以便每隔几分钟(或几秒钟)调整一次时钟,因为在更新后(由于某些网络延迟,使时钟不精确到毫秒),时钟将再次开始漂移。

您能否将“高精度”的定义添加到您的帖子中,因为这是一个非常主观的术语。另外,您能否澄清您是如何通过网络在通信计算机之间同步时间的,因为使用本地计算机时钟可能不够准确。