可靠地比较不同机器的时间戳C++
Reliably compare different machine's timestamps in C++
我有三台通过以太网连接的机器A, B, C
。A
将将UDP数据包发送到B
,该数据包将其转发至C
。我想可靠地衡量传播时间。假设这三台机器是使用本地NTP server
的时间同步。
在C++
中生成时间戳的最佳方法是什么?我目前的猜测是chrono
。我理解的方式是,它的high_resolution_clock
不在这里的问题,因为它可以使用每个操作上会增加的CPU寄存器之类的东西。因此,这会因机器启动何时而异。相反,我将使用steady_clock
,它将使用同步系统时间,但希望我会阻止我遇到诸如leap seconds之类的问题,如果我使用system_clock
,这很重要。
我在这些假设中是正确的吗?有更好的方法吗?
稳定时钟根本不会帮助您,因为它不是壁时钟,并且从定义上可以同步(稳定,NTP无法更改)。因此,您唯一的选择是壁时钟/系统时钟。
您的问题之一是,通过NTP同步的时间不是很精确。如果您想在几秒钟的尺寸中比较时间戳,则可能还可以。对于其他所有时钟,您的时钟通常都太远了,无法取得良好的效果。
有专门的协议,用于在不同机器之间同步时钟,例如PTP和GPTP。其中一些甚至需要专用硬件(例如Ethernet AVB功能的硬件)。如果您需要精确,那么您的第一个研究应该是如何将这些研究集成到系统中以及如何阅读其时间戳。
-
high_resolution_clock
几乎总是(如果不是总是)steady_clock
或system_clock
,因此它可能是通用墙时或机器特定的计数器。您真的不知道会得到哪个。值得阅读的讨论:https://stackoverflow.com/a/38253266/4581301 -
steady_clock
不是您的时钟。在不同机器上steady_clock
s之间没有保证的相关性。
这使您拥有system_clock
或特定于实现的时钟。
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 在多个时间戳处执行函数
- 以天C++为单位的两个时间戳之间的差异
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 在 C++ 中为文件名添加时间戳
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何将消息时间戳写入日志文件?
- 将时间戳打印到流的最简单方法
- 读取悖论时间戳字段
- C++程序中多个位置的时间 (0) 时间戳
- 在 c++ 中获取 X 毫秒前的时间戳
- 将 unix 时间戳转换为人类可读的日期
- Microsoft NTLM (v2) 中的时间戳使用
- C++中上周一的时间戳
- C++-需要读取存储在文件(.txt)中的时间戳并正确检索
- 使用 C++将时间戳转换为格式化的日期时间
- 可靠地比较不同机器的时间戳C++