時鐘
在<chrono>頭文件中,有兩個主要的時鐘類:std::chrono::system_clock和std::chrono::steady_clock。前者提供了與操作系統(tǒng)的系統(tǒng)時間相關的功能,可以用于獲取當前時間、計算時間間隔等;后者提供了一個穩(wěn)定的時鐘,不受系統(tǒng)時間調(diào)整的影響,通常用于測量時間間隔,例如性能分析。
時鐘類提供了一個靜態(tài)成員函數(shù)now來獲取當前時間,其返回的類型是時間點time_point。
時間間隔 / 時延
std::chrono::duration是一個模板類,用于表示時間間隔。其定義如下:

Rep表示時間間隔的數(shù)據(jù)類型,可以是整型或浮點型。Period表示時間單位的類型,默認為std::ratio<1>。例如,當幾分鐘的時間要存在short類型中時,可以寫成 std::chrono::duration<short,?std::ratio<60, 1>>,因為60秒是才是1分鐘。當需要將毫秒級計數(shù)存在double類型中,可以寫成std::chrono::duration<double,?std::ratio<1, 1000>>,因為1秒等于1000毫秒。
std::chrono命名空間中,提供了一些預定義類型:nanoseconds[納秒],microseconds[微秒],milliseconds[毫秒],seconds[秒],minutes[分]和hours[時]。
duration還支持四則運算。
時間點
std::chrono::time_point是一個模板類,用于表示時間點。它的第一個參數(shù)用來指定所要使用的時鐘,第二個函數(shù)參數(shù)用來表示時間的計量單位(特化的std::chrono::duration)。

時間點的功能
I.時間計算和測量:時間點可用于執(zhí)行時間間隔的計算和測量。通過記錄兩個時間點之間的時間差,可以精確地計算代碼片段的執(zhí)行時間,從而進行性能優(yōu)化和時間復雜度分析。
II.時間比較:可以使用時間點進行時間的比較。這樣可以判斷事件的先后順序,比較不同操作的執(zhí)行時間,或者檢查某個時間點是否在給定時間范圍內(nèi)。
III.定時任務和延時操作:時間點可以用于實現(xiàn)定時任務和延時操作。通過設置時間點,可以讓程序在未來的某個特定時刻執(zhí)行特定的任務,或者在當前時間點的基礎上延時一段時間后再執(zhí)行。
下面創(chuàng)建了一個利用對象生存周期進行自動計時的結(jié)構(gòu)體Timer。

超時
時間點一般用在后綴為until的函數(shù)中,比如wait_until。
condition_variable的成員函數(shù)wait_until與wait的功能類似,它允許線程等待直到指定的時間點或條件滿足為止。

函數(shù)wait_until的作用是阻塞當前線程,直到條件變量被通知、超過了指定的截止時間,或者虛假喚醒(spurious wake-up)發(fā)生。
虛假喚醒是指使用條件變量等待的線程在沒有明確被通知的情況下,也會從等待狀態(tài)被喚醒(原因可能是系統(tǒng)內(nèi)部的調(diào)度、硬件中斷等)。
下面的例子展示了如何等待一個條件變量(具有超時功能)。

檢查超時:在等待的過程中,如果等待超過了500毫秒,則跳出循環(huán)。