![](/img/trans.png)
[英]Is it correct to use std::chrono::steady_clock time across the system?
[英]chrono steady_clock not giving correct result?
我的app服務器代碼中有一行代碼,它使用steady_clock
獲取時間戳值,如下所示:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
現在我們有兩個系統machineA運行Ubuntu 12 (gcc 4.6.3 compiler)
和machineB運行Ubuntu 14 (gcc 4.8.2 compiler)
。
現在我們在另一個 Ubuntu 12 VM (which has 4.7.3 compiler)
上使用make編譯我們的app服務器代碼,然后將生成的tar文件復制到machineA並啟動我們的app服務器。 在開始之后,上面的代碼行在machineA中打印出如下值:
1439944652967
現在我們還使用另一個 Ubuntu 14 VM (which has 4.8.2 compiler)
上的make編譯相同的應用服務器代碼,然后將生成的tar文件復制到machineB並啟動我們的app服務器。 在開始之后,上面的代碼行在machineB中打印出這樣的值:
10011360
你看到差異吧? 我很困惑為什么這是差異,我無法理解這一點? 所有代碼和一切都是一樣的。 有沒有人對此有任何解釋,我該如何解決?
如果需要,我可以嘗試添加一些調試代碼,看看弄清楚這個問題有什么不對。
我擔心std::steady_clock
會有什么混亂。
time_since_epoch
給出了從時鍾開始以來的持續時間,不一定是Unix紀元。 steady_clock
只保證單調增加。 這意味着steady_clock
將始終向前移動並且永遠不會減少。
無法保證steady_clock
代表任何有意義的東西。 它可以是自程序執行開始以來的持續時間,計算機打開的持續時間,自最近的星期二以來的持續時間,或者只要它繼續向前移動的幾乎任何東西。
換句話說, steady_clock
實際上並不是講真實世界時間的有用信息 。 它只對測量時間的流逝有用。 它的用途可能包括您有時間點A和時間點B的任何情況,並且您對它們之間的持續時間感到好奇:基准測試,進度估算等。
如果您正在尋找真實的世界時間,您應該查看std::system_clock
,這是一個代表系統時間的時鍾(即操作系統的時間)。 它非常適合講述時間,但它對於測量差異非常無用,因為它不能保證單調,幾乎肯定沒有夏令時,用戶調整時鍾,以及其他可以改變現實世界時間的事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.