2016-11-04 74 views
2

是否有符合便攜式標準的方法來創建1970年1月1日00:00:00的std :: chrono :: time_point?這必須是線程安全的。因此,該解決方案應該避免像std::gmtime()std::localtime()這些沒有線程安全保證的功能。如何在1970年1月1日00:00:00創建一個std :: chrono :: time_point?

這不是Convert std::chrono::time_point to unix timestamp重複,因爲我要請便攜式解決方案,線程安全。這個問題也沒有要求,答案也沒有提供這種保證。

+1

這聽起來像兩個問題,1)如何創建一個特定的時間點 - 沒有線程問題,2)如何獲得當前時間 - 潛在的線程問題。 – wally

+1

[將std :: chrono :: time \ _point轉換爲unix時間戳]的可能重複(http://stackoverflow.com/questions/14504870/convert-stdchronotime-point-to-unix-timestamp) –

+0

請注意。 Posix標準沒有定義「時代」,然後依靠「秒」和「自」的正常含義。它定義了完整的短語「自時代以來的秒」,並不意味着你可能認爲它的意思。 –

回答

5

實際上,std::chrono::system_clock::from_time_t(0)將返回所需的值。

原則上,我看不出你到底想要什麼。

作爲替代方法,在多線程開始運行之前計算一次(在啓動時)該值。

+0

短語*在實踐中*聽起來不是很便攜。事實上,標準中沒有明確定義'std :: time_t'的類型。 –

+0

我同意沒有定義'std :: time_t'的類型。 *在實踐中*,我的意思是「我不知道任何當前的實現,這將無法正常工作」。這可能會導致您對嵌入式系統(不是Posix系統)感到悲傷(但系統通常使用C而不是C++編程),我不瞭解IBM操作系統(AIX會好)。 –

+0

請注意,'std :: time_t'是*被定義爲算術,所以一個零字將毫無困難地轉換成它。 –

相關問題