簡體   English   中英

持久性 std::chrono time_point<steady_clock></steady_clock>

[英]Persistent std::chrono time_point<steady_clock>

我在我的項目中使用了一些time_point<steady_clock>變量,以便以特定的時間間隔進行操作。 我想在文件中序列化/反序列化這些值。

但是似乎來自time_since_epochsteady_clock並不可靠,雖然來自system_clocktime_since_epoch還可以,但它總是從 1970/1/1(UNIX 時間)開始計算時間

對我來說最好的解決方案是什么? 似乎我必須以某種方式從steady_clock轉換為system_clock ,但我認為這是無法實現的。

PS我已經閱讀了這里的主題: Persisting std::chrono time_point instances

std::chrono::steady_clock的 cppreference 頁面上,它說:

此時鍾與掛鍾時間無關(例如,可以是自上次重啟以來的時間),最適合測量間隔。

std::chrono::system_clock的頁面說大多數實現都使用 UTC 作為紀元:

system_clock 的紀元未指定,但大多數實現使用 Unix 時間(即,自 1970 年 1 月 1 日星期四 00:00:00 協調世界時 (UTC) 開始的時間,不包括閏秒)。

如果您嘗試跨機器比較時間或希望將記錄的時間與現實世界事件相關聯(即今天下午 3 點出現問題),那么您需要將代碼切換為使用系統時鍾。 每當您重新啟動穩定時鍾時,它都會重置,並且與掛鍾時間無關。

編輯:如果您想在steady時間戳和system時間戳之間進行近似轉換,您可以執行以下操作:

template <typename To, typename FromTimePoint>
typename To::time_point approximate_conversion(const FromTimePoint& from) {
    const auto to_now = To::now().time_since_epoch();
    const auto from_now = FromTimePoint::clock::now().time_since_epoch();

    // compute an approximate offset between the clocks and apply that to the input timestamp
    const auto approx_offset = to_now - from_now;
    return typename To::time_point{from.time_since_epoch() + approx_offset};
}

int main() {
    auto steady = std::chrono::steady_clock::now();
    auto system = approximate_conversion<std::chrono::system_clock>(steady);
}

這假設時鍾不會很快分開,並且兩個時鍾都沒有大的不連續性(這兩個都是長時間的錯誤假設)。

暫無
暫無

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

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