簡體   English   中英

C ++ 11如何打印出高分辨率時鍾time_point

[英]C++11 how to print out high resolution clock time_point

當從high_resolution_clock獲取time_point時,如何打印time_point?

timestamp = std::chrono::high_resolution_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(timestamp);
std::cout << std::ctime(&now) << std::endl;

編譯時收到以下錯誤消息:

error: no viable conversion from 'time_point<class std::__1::chrono::steady_clock, duration<[...], ratio<[...], 1000000000>>>' to 'const time_point<class std::__1::chrono::system_clock, duration<[...], ratio<[...], 1000000>>>'
        time_t tt = std::chrono::system_clock::to_time_t(timestamp);

沒有真正優雅的方式來做到這一點。 不知道high_resolution_clock與UTC或任何其他日歷有關。 你可以做的一件事是從未指定的時期輸出當前的持續時間,以及該持續時間的單位:

#include <chrono>
#include <iostream>

int
main()
{
    using Clock = std::chrono::high_resolution_clock;
    constexpr auto num = Clock::period::num;
    constexpr auto den = Clock::period::den;
    std::cout << Clock::now().time_since_epoch().count()
              << " [" << num << '/' << den << "] units since epoch\n";
}

哪個對我輸出:

516583779589531 [1/1000000000] units since epoch

這意味着自我機器上的這個時鍾的紀元以來它是516583779589531納秒(或516,583.779589531秒)。 在我的機器上,這意味着:我的機器已經啟動了將近6天。 但是這種翻譯不可移植。

啊! 我從您的錯誤消息中注意到您使用的是libc ++ 如果您也在OS X上,那么我們對high_resolution_clock有相同的定義:自計算機啟動以來它的計數為納秒。

至少當我讀到東西時,意圖是std::high_resolution_clock可以被定義為類似CPU的時間戳計數器的包裝器,這只是一個在每個CPU時鍾周期遞增的寄存器。

情況不一定(並且當前系統不斷修改CPU時鍾頻率可能不是一個好主意),但其他類似的時鍾也是支持的。

底線:絕對時間和高分辨率時鍾之間可能沒有已知的關系,所以它的確定義只是為了產生持續時間,而不是絕對時間。

暫無
暫無

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

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