可靠地比较C ++中不同机器的时间戳

时间:2016-11-23 18:34:34

标签: c++ c++11 timestamp

我有三台机器A, B, C通过以太网连接。 A会向B发送UDP数据包,并将其转发至C。我想可靠地测量传播时间。假设这三台计算机使用本地NTP server进行时间同步。

C++中生成时间戳的最佳方法是什么?我目前的猜测是chrono。我理解它的方式是它的high_resolution_clock在这里是不可能的,因为它可以使用像每个操作增加的CPU寄存器之类的东西。因此,这将根据机器启动的时间而有很大差异。相反,我会选择使用同步系统时间的steady_clock,但希望能阻止我使用闰秒之类的问题,如果我使用system_clock那就很重要。

我对这些假设是否正确?有没有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

稳定的时钟根本不会帮助你,因为它不是挂钟,它可以根据定义不同步(它是稳定的,NTP不能改变它)。所以你唯一的选择是挂钟/系统时钟。

然而,您的一个问题是通过NTP进行的时间同步不是很精确。如果要比较秒的维度中的时间戳,可能没问题。对于其他一切,你的时钟通常太远而无法提供良好的效果。

存在用于在不同机器之间同步时钟的专用协议,例如, PTP和gPTP。其中一些甚至需要专用硬件(如支持以太网AVB的硬件)。如果您需要精确度,那么您的第一项研究应该是如何将这些内容集成到您的系统中以及如何阅读它们的时间戳。

答案 1 :(得分:2)

  1. high_resolution_clock几乎总是(如果不是总是)steady_clocksystem_clock,因此它可以是通用挂壁时间或机器专用计数器。你真的不知道你会得到什么。值得一读的讨论:https://stackoverflow.com/a/38253266/4581301

  2. steady_clock is not the clock for you.不同机器上的steady_clock之间没有保证相关性。

  3. 这会留下system_clock或特定于实现的时钟。

相关问题