簡體   English   中英

std chrono時間同步

[英]std chrono time synchronization

我需要通過網絡發送一些帶有時間戳的數據,這次應該具有高精度。 看看std::chrono時鍾,我發現std::chrono::*_clock::now()返回time_point ,這取決於時鍾的時代。 我沒有找到每個時鍾使用哪個時代,以及在通過網絡發送時可以安全使用哪個時代。 例如在windows上,high_resolution_clock是QueryPerformanceCounter包裝器,它具有良好的精度,但是,我認為,它無用作網絡任務的時間戳。

那么問題是如何通過網絡“同步”高分辨率時鍾?

std::chrono::system_clock的紀元目前尚未指定。 然而,它可以輕松地衡量自1970-01-01 00:00:00 UTC以來的時間,忽略了閏秒。 這與所謂的Unix Time一致。

我目前正在努力使這種現有做法標准化 我有來自std::chrono::system_clock的實現者的私人非官方保證,他們不會在過渡期間改變他們現有的做法。

另外兩個std -defined計時鍾表: high_resolution_clocksteady_clock ,不具備可移植性定義的時代。

請注意, system_clock雖然具有(事實上的)便攜式紀元,但沒有便攜式精度。 在clang / libc ++上,精度是微秒。 在gcc上精度為納秒,在Windows上精度為100ns。 所以你可以使用time_point_cast<microseconds>(system_clock::now())來獲得可移植的精度。

如果您想要“高精度”(您應該指定更好)同步,首先需要使所有網絡設備定期與同一NTP服務器同步。 您需要配置機器以便每隔幾分鍾(或幾秒)調整時鍾,因為更新后(有一些網絡延遲會使它們在毫秒級內不精確),時鍾將再次開始漂移。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM