版權所有 © 2008 Howard Hinnant
版權所有 © 2006, 2008 Beman Dawes
版權所有 © 2009-2013 Vicente J. Botet Escriba
依據 Boost 軟體授權條款 1.0 版發佈。(請參閱隨附檔案 LICENSE_1_0.txt 或複製於 https://boost.dev.org.tw/LICENSE_1_0.txt)
目錄
]
]
「那麼,時間是什麼?如果沒有人問我,我知道;如果我必須向問我的人解釋,我就不知道了。」
-- 奧古斯丁
本文檔使用以下命名和格式慣例。
等寬 字體
顯示,並進行語法高亮顯示。斜體
顯示。()
,例如 free_function()
。class_template<>
;也就是說,它以程式碼字體顯示,並且其名稱後接 <>
以表示它是類別樣板。MACRO()
;也就是說,它以程式碼字體大寫顯示,並且其名稱後接 ()
以表示它是類似函式的巨集。類似物件的巨集則不顯示尾隨的 ()
。![]() |
注意 |
---|---|
此外,像這樣的注意事項會指定提供額外背景或基本原理的非必要資訊。 |
最後,您可以將以下內容加入本文檔中的任何程式碼片段中
// Include all of Chrono files #include <boost/chrono.hpp>
我們每天都與時間打交道。我們從出生起就直觀地了解它。因此,我們都非常熟悉它,並認為它是一件簡單的事情。在電腦程式中對時間的建模也應該同樣簡單。不幸的是,這種感知到的簡單性只是表面上的。幸運的是,我們不需要非常複雜的解決方案來滿足我們的大部分需求。然而,過於簡化的解決方案可能是危險且低效的,並且不會隨著電腦產業的發展而調整。
Boost.Chrono 實作了 C++11 中新的時間功能,正如 N2661 - A Foundation to Sleep On 中提出的那樣。該文件提供了關鍵設計決策的背景和動機,並且是本文檔中大量資訊的來源。
除了標準提案提供的時鐘外,Boost.Chrono 還提供了特定的行程和執行緒時鐘。
為了使 Boost.Chrono 的計時功能更具通用性,該函式庫提供了許多時鐘,它們是作業系統行程時間 API 的精簡包裝器,從而允許提取行程的牆上時鐘時間、使用者 CPU 時間和系統 CPU 時間。牆上時鐘時間是 CPU 時間和系統 CPU 時間的總和。(在類 POSIX 系統上,這依賴於 times()
。在 Windows 上,它依賴於 GetProcessTimes()
。)
Boost.Chrono 函式庫提供
duration
類別管理。時間長度的範例包括天、minutes
(分鐘)、seconds
(秒)和 nanoseconds
(奈秒),它們可以用每個單位固定的時鐘滴答數來表示。duration
功能透過泛型介面將所有這些時間長度單位結合在一起。time_point
。一個 time_point
表示一個紀元加上或減去一個 duration
。此函式庫未指定紀元。一個 time_point
與一個「時鐘」關聯。system_clock
、steady_clock
和 high_resolution_clock
。一個時鐘是由一個 time_point
和一個 duration
的配對,以及一個返回表示「現在」的 time_point
的函式。為了讓計時功能更具通用性,**Boost.Chrono** 提供了一些時鐘,它們是作業系統時間 API 的輕量級包裝器,從而允許提取牆上時鐘時間、使用者 CPU 時間、程序所花費的系統 CPU 時間,
process_real_cpu_clock
,擷取目前程序所花費的牆上時鐘 CPU 時間。process_user_cpu_clock
,擷取目前程序所花費的使用者 CPU 時間。process_system_cpu_clock
,擷取目前程序所花費的系統 CPU 時間。process_cpu_clock
,它同時擷取實際、使用者 CPU 和系統 CPU 程序時間。thread_clock
執行緒穩定時鐘,提供目前執行緒所花費的時間(當平台支援時)。最後,**Boost.Chrono** 包含 typeof 註冊,用於 duration
和 time_point
,以便允許在 C++03 編譯器中使用模擬的 auto。
它為 duration
和 time_point
提供輸入/輸出功能。這使得使用這些類型更加方便。秉持著「用多少,付多少」的哲學,這個額外的功能位於一個獨立於 <boost/chrono/chrono.hpp> 的標頭檔中,即 <boost/chrono/chrono_io.hpp>。
它建立在 <boost/ratio/ratio_io.hpp>
之上,為 <boost/chrono.hpp>
中的類型提供可讀且靈活的格式化和解析功能。這種文字表示法盡可能使用SI 字首。這使得 boost::milliseconds
可以很容易地以文字「毫秒」表示,或者一個假設的公尺類別可以印出「毫米」。duration
和 time_point
的輸入/輸出可以通過新的 Facet 進行客製化:duration_units
和 time_point_units
。使用者可以特製化這些 Facet,以便 chrono 的輸入/輸出可以本地化。然而,Boost.Chrono 並未提供完整的在地化解決方案。
system_clock::time_point
的輸入/輸出是以 UTC 時間點的形式提出的,主要參考 ISO 9899:1999(程式語言 - C)、ISO 9945:2003(資訊科技 - 可攜式作業系統介面 (POSIX))和 ISO 8601:2004(資料元素和交換格式 - 資訊交換 - 日期和時間的表示法)。
一些用於處理時間長度的簡單捨入工具函式。
作業系統提供的底層時鐘會受到許多看似隨意的策略和實作差異的影響。這是一種委婉的說法,它們往往不太可靠,而且每個作業系統,甚至每個時鐘都有其獨特且異常的不可靠形式。不要過度依賴它們的準確性,除非您已經深入了解特定作業系統的保證,而這些保證通常很少。