【发布时间】:2017-04-07 21:38:54
【问题描述】:
我有三台机器A, B, C 通过以太网连接。 A 会将 UDP 数据包发送到 B,B 会将其转发到 C。我想可靠地测量传播时间。假设这三台机器使用本地 NTP server 进行时间同步。
在C++ 中生成时间戳的最佳方法是什么?我目前的猜测是chrono。我理解它的方式是它的high_resolution_clock 在这里是不可能的,因为它可以使用像每次操作都会递增的 CPU 寄存器之类的东西。所以这会根据机器启动的时间而有很大的不同。相反,我将使用steady_clock,它将使用同步的系统时间,但希望能防止我遇到像闰秒这样的问题,如果我使用system_clock,这很重要。
我的这些假设是否正确?有更好的方法吗?
【问题讨论】:
-
您的目标是哪个操作系统/工具链?
-
Linux(一些 Ubuntu 变体),使用 boost::asio 发送内容。每当发送某些内容时,源都会记住它发送该数据包的时间戳。接收器将记住到达的时间戳。两者都会定期对这些数据进行 ping。
-
忽略闰秒。如果您检测到在测量期间或周围发生了闰秒,请放弃该测量。处理最多每六个月发生一次的事件比特殊情况要容易得多。
-
很公平。 :)