[英]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.