我正在使用 FastRTPS 在单个 Linux 系统上的多个进程之间进行通信。它们以数据包的形式交换信息。每个数据包都有一个独立于其发送或接收时间的时间戳。这样就可以正确使用所传达的信息。
我正在考虑使用:
uint64_t time_in_microseconds = std::chrono::duration_cast
<std::chrono::microseconds>(std::chrono::steady_clock::now()
.time_since_epoch()).count();
Run Code Online (Sandbox Code Playgroud)
获取数据包的时间戳。
但是,单个系统上的进程之间的稳定时钟是否稳定?还是只在单个进程内?
如果不是,系统时钟在正常情况下会变化多少?它会“回到过去”多少?(不手动调整,没有互联网连接,没有时间变化等)
谢谢
编辑:
数据包将用于状态估计和控制算法。例如,传感器数据将从传感器读取过程转移到状态估计过程。状态信息将从估计过程转移到控制过程。这就是为什么我需要能够在整个系统中一致地测量间隔。system_clock 和 stable_clock 似乎都没有提供我需要的。System_clock 是一致的,但不是单调的。稳定时钟在单个进程内是单调且一致的,但据我所知,它在整个系统中不一致?或者是吗?
steady_clock更适合测量间隔。
std::chrono::steady_clock 表示单调时钟。该时钟的时间点不会随着物理时间的向前移动而减少,并且该时钟的滴答之间的时间是恒定的。该时钟与挂钟时间无关(例如,它可以是自上次重新启动以来的时间),并且最适合测量间隔。
system_clock是系统范围的,可能是您所需要的,但可能不是单调的:
类 std::chrono::system_clock 表示系统范围的实时挂钟。它可能不是单调的:在大多数系统上,系统时间可以随时调整。它是唯一能够将其时间点映射到 C 风格时间的 C++ 时钟,因此可以显示[直到 C++20]
纪元将更改自 将更改自c++20
system_clock测量 Unix 时间(即自 1970 年 1 月 1 日星期四 00:00:00 协调世界时 (UTC) 开始的时间,不包括闰秒)。[自 c++20 起]