什么是最好的C ++计时功能来在两台机器之间建立时间戳

时间:2018-10-31 07:04:07

标签: c++ timestamp epoch chrono

我发现this question与chrono time_since_epoch()函数有关。有了该线程中给出的答案,我们可以在同一台机器上的多个平台上实现时间戳。我有两台机器,它们以微秒为单位显示两个不同的time_since_epoch()。我需要给从一台机器发送到另一台机器的数据包加上时间戳,以计算该数据包的延迟。

当前我已使用

    uint64_t usCurrentTime = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); 

函数获取自纪元以来的当前时间(以微秒为单位),但是由于我将其保存在uint64_t中,因此延迟正在下溢,这是因为两台计算机均未进行时间同步。如何使用chrono库函数满足我的需求

2 个答案:

答案 0 :(得分:3)

您没有可访问的时间戳,可以确保接收方的时间戳大于发送方的时间戳。产生可在机器之间进行有意义比较的值的唯一时钟是system_clock,即“系统时间”,即您的PC显示为当前时间;他们不需要同步。您将不得不变得更加聪明。

C ++ 20将提供tai_clockutc_clockgps_clock,其中之一很可能满足您的需求(但同步不良会导致时间戳记之间的差异仍然很大! )。

一种可能的方法:机器1向机器2发送一个带有std::chrono::high_resolution_clock时间戳的数据包。机器2将其发送回去。机器1接收返回的数据包,并将接收到的时间戳与std::chrono::high_resolution_clock::now()进行比较,然后除以2。

答案 1 :(得分:0)

也许可以将同一局域网中的第三台计算机用作时间戳记源,其他两台计算机在消息中接收其时间戳记并计算时间戳记差异。