簡體   English   中英

chrono steady_clock沒有給出正確的結果?

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

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