Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式碼規範

PrevUpHomeNext

第六章 Boost.Chrono 2.0.8

Howard Hinnant

Beman Dawes

Vicente J. Botet Escriba

依據 Boost 軟體授權條款 1.0 版發佈。(請參閱隨附檔案 LICENSE_1_0.txt 或複製於 https://boost.dev.org.tw/LICENSE_1_0.txt)

目錄

概述
動機
說明
使用者指南
入門
教學
範例
外部資源
參考
標頭檔 <boost/chrono/include.hpp>
已包含在 C++11 標準中
Chrono I/O V1
Chrono I/O V2
Chrono 四捨五入工具
其他時鐘
附錄
附錄:歷史
附錄:基本原理
附錄:實作說明
附錄:常見問題
附錄:致謝
附錄:未來計畫

]

]

那麼,時間是什麼?如果沒有人問我,我知道;如果我必須向問我的人解釋,我就不知道了。

-- 奧古斯丁

如何使用此文件

本文檔使用以下命名和格式慣例。

  • 程式碼以 等寬 字體 顯示,並進行語法高亮顯示。
  • 您需要提供的可替換文字以 斜體 顯示。
  • 自由函式以程式碼字體呈現,後接 (),例如 free_function()
  • 如果名稱指的是類別樣板,則會像這樣指定:class_template<>;也就是說,它以程式碼字體顯示,並且其名稱後接 <> 以表示它是類別樣板。
  • 如果名稱指的是類似函式的巨集,則會像這樣指定:MACRO();也就是說,它以程式碼字體大寫顯示,並且其名稱後接 () 以表示它是類似函式的巨集。類似物件的巨集則不顯示尾隨的 ()
  • 在泛型程式設計的意義上,指的是概念的名稱以駝峰式大小寫 (CamelCase) 指定。
[Note] 注意

此外,像這樣的注意事項會指定提供額外背景或基本原理的非必要資訊。

最後,您可以將以下內容加入本文檔中的任何程式碼片段中

// 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_clocksteady_clockhigh_resolution_clock。一個時鐘是由一個 time_point 和一個 duration 的配對,以及一個返回表示「現在」的 time_point 的函式。
其他時鐘

為了讓計時功能更具通用性,**Boost.Chrono** 提供了一些時鐘,它們是作業系統時間 API 的輕量級包裝器,從而允許提取牆上時鐘時間、使用者 CPU 時間、程序所花費的系統 CPU 時間,

最後,**Boost.Chrono** 包含 typeof 註冊,用於 durationtime_point,以便允許在 C++03 編譯器中使用模擬的 auto。

輸入/輸出

它為 durationtime_point 提供輸入/輸出功能。這使得使用這些類型更加方便。秉持著「用多少,付多少」的哲學,這個額外的功能位於一個獨立於 <boost/chrono/chrono.hpp> 的標頭檔中,即 <boost/chrono/chrono_io.hpp>。

它建立在 <boost/ratio/ratio_io.hpp> 之上,為 <boost/chrono.hpp> 中的類型提供可讀且靈活的格式化和解析功能。這種文字表示法盡可能使用SI 字首。這使得 boost::milliseconds 可以很容易地以文字「毫秒」表示,或者一個假設的公尺類別可以印出「毫米」。durationtime_point 的輸入/輸出可以通過新的 Facet 進行客製化:duration_unitstime_point_units。使用者可以特製化這些 Facet,以便 chrono 的輸入/輸出可以本地化。然而,Boost.Chrono 並未提供完整的在地化解決方案。

system_clock::time_point 的輸入/輸出是以 UTC 時間點的形式提出的,主要參考 ISO 9899:1999(程式語言 - C)、ISO 9945:2003(資訊科技 - 可攜式作業系統介面 (POSIX))和 ISO 8601:2004(資料元素和交換格式 - 資訊交換 - 日期和時間的表示法)。

捨入工具

一些用於處理時間長度的簡單捨入工具函式。

買者自負

作業系統提供的底層時鐘會受到許多看似隨意的策略和實作差異的影響。這是一種委婉的說法,它們往往不太可靠,而且每個作業系統,甚至每個時鐘都有其獨特且異常的不可靠形式。不要過度依賴它們的準確性,除非您已經深入了解特定作業系統的保證,而這些保證通常很少。


PrevUpHomeNext