C++中std::chrono時間庫的全面解析
一、引言
C++ std::chrono時間庫是C++標準庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,用于在程序中進行時間相關(guān)的操作和計算。它具有以下重要性和作用:
精確的時間計量:std::chrono時間庫提供了高精度的時間計量單位和操作,可以精確測量和計算代碼的執(zhí)行時間、延時等。
跨平臺兼容性:std::chrono時間庫在不同平臺上都具備良好的兼容性,無論是Windows、Linux還是其他操作系統(tǒng),都可以使用該庫進行時間處理,使代碼具備良好的可移植性。
高度可擴展性:該庫提供了豐富的時間單位和精度選項,適應(yīng)不同場景下的時間計算需求。無論是秒、毫秒、微秒還是納秒的時間單位,都可以很方便地應(yīng)用于代碼中。
時鐘的靈活選擇:std::chrono時間庫提供了不同類型的時鐘,如系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高分辨率時鐘(high_resolution_clock),可以根據(jù)具體需求選擇合適的時鐘類型。
時間點和時間段的處理:該庫提供了表示時間點(time_point)和時間段(duration)的相關(guān)類,可以對時間進行精確刻度和處理。時間點表示具體的時間,時間段表示兩個時間點之間的時間差。
C++ std::chrono時間庫能夠幫助準確測量和控制代碼的執(zhí)行時間,處理定時任務(wù),進行時間間隔計算等操作。這里將全面介紹C++ std::chrono時間庫的使用,幫助讀者理解其核心概念和各種功能,從而在編程中更好地掌握時間的節(jié)奏,解放代碼從時間束縛中。
目標:
- 首先對C++ std::chrono時間庫進行全面而清晰的概述,解釋其在編程中的重要性和作用。
- 詳細講解C++ std::chrono時間庫的組成部分,包括duration、time_point和clock。了解它們是如何相互配合工作的,以及如何使用它們來進行時間相關(guān)的操作。
- 供詳細的使用攻略,涵蓋duration(時間段)的使用方法、單位和精度的選擇、示例代碼等;time_point(時間點)的創(chuàng)建、比較和操作方法,以及相關(guān)的應(yīng)用場景;不同類型的時鐘(clock)的特點、適用場景和使用方法等。
- 除了基本的使用方法,還將探討一些高級技巧和實踐,如時區(qū)處理、時間格式轉(zhuǎn)換等。我們還將解決一些常見的時間相關(guān)問題,提供實用的技巧和最佳實踐,更高效、準確地使用時間庫,解放代碼從時間束縛中。
二、C++ std::chrono時間庫概述
2.1、std::chrono命名空間的作用和用途
C++ std::chrono命名空間是C++標準庫中的一個命名空間,它包含了一組用于處理時間和時間相關(guān)操作的類和函數(shù)。該命名空間提供了豐富的時間處理功能,旨在方便進行時間計算、測量和控制。
std::chrono命名空間的主要作用和用途:
1.提供時間單位和精度的定義:std::chrono命名空間定義了一系列時間單位,如秒(seconds)、毫秒(milliseconds)、微秒(microseconds)和納秒(nanoseconds),以及精度等級,如高精度時鐘(high_resolution_clock)和穩(wěn)定時鐘(steady_clock)。這些定義使得時間計算和測量更加靈活和精確。
2.定義時間段和時間點的概念:std::chrono命名空間提供了表示時間段(duration)和時間點(time_point)的相關(guān)類,包括std::chrono::duration和std::chrono::time_point。時間段表示兩個時間點之間的時間差,時間點表示具體的時間。
3.支持時間的計算和操作:該命名空間提供了各種用于時間計算和操作的函數(shù)和操作符。例如,可以通過相加或相減兩個時間點或時間段來計算時間的差異、延遲或間隔。也可以比較兩個時間點的先后順序,判斷時間的先后關(guān)系。
4.管理和控制時間流逝:std::chrono命名空間提供了函數(shù)和工具,可用于管理和控制時間的流逝。例如,可以獲取當前的系統(tǒng)時間和時鐘時間,或者獲取程序執(zhí)行的實際時間。還可以設(shè)置定時任務(wù)或者延時執(zhí)行代碼。
5.std::chrono命名空間是C++標準庫的一部分,因此它具有跨平臺的兼容性,并且在不同的操作系統(tǒng)中都能正常工作。
2.2、基本組成部分:duration、time_point和clock
時間庫的基本組成部分包括duration(時間段)、time_point(時間點)和clock(時鐘)。它們相互配合,用于表示和處理時間的不同方面。
duration(時間段):
duration是時間庫中表示時間段的類。它表示兩個時間點之間的時間差。時間段可以用秒(seconds)、毫秒(milliseconds)、微秒(microseconds)等不同的單位來表示。duration類的模板參數(shù)包括時間單位和所需的精度。比如:std::chrono::duration<int, std::ratio<1, 1000>>表示毫秒級別的時間段。在使用Duration時,可以進行加減、比較和表示等操作。
time_point(時間點):
time_point表示一個特定的時間點,可以理解為時間的戳記。時間點和時間段之間可以進行加減運算,用于計算時間的差異或延遲。time_point類的模板參數(shù)包括所采用的時鐘類型和時間單位。比如:std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>表示系統(tǒng)時鐘下的納秒級時間點??梢垣@取當前的時間點、比較不同時間點的順序,以及對時間點進行格式化等操作。
clock(時鐘):
clock是時間庫中的時鐘類,用于提供時間的基準和計量。不同的時鐘類型提供不同的時間精度和功能。常用的時鐘類型有系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高精度時鐘(high_resolution_clock)。系統(tǒng)時鐘提供了與操作系統(tǒng)相關(guān)的時間,穩(wěn)定時鐘提供了穩(wěn)定的、不受系統(tǒng)時間變化影響的時間,而高精度時鐘提供了更高的時間精度。時鐘類可以獲取當前時間,計算時間的間隔和延遲等。
這三個基本組成部分相互配合,使時間庫具有了強大的時間處理能力。Duration表示時間段,Time_point表示時間點,而Clock則提供了時鐘的基準。通過使用它們,可以對時間進行準確的計算、比較和操作,從而靈活地處理時間相關(guān)的任務(wù)和邏輯。
三、duration的使用詳解
3.1、duration表示時間段的概念和使用方法
Duration(時間段)是時間庫中表示時間間隔的類,用于表示兩個時間點之間的時間差。
1.表示和定義duration:
duration類是一個模板類,模板參數(shù)包括時間單位和精度。時間單位可以是秒(seconds)、毫秒(milliseconds)、微秒(microseconds)或納秒(nanoseconds),精度可以是整數(shù)類型(int、long)、浮點類型(float、double)等。例如,可以定義一個表示毫秒級別的時間段:std::chrono::duration<int, std::milli>。
2.創(chuàng)建duration對象:
可以通過直接給Duration對象賦值來創(chuàng)建它。對Duration對象的賦值可以使用整數(shù)、浮點數(shù)、其他duration對象,以及乘法、除法、加法和減法等操作。例如:
std::chrono::duration<int, std::milli> duration1(500); // 創(chuàng)建一個表示500毫秒的duration對象 std::chrono::duration<double, std::ratio<1, 1000>> duration2 = 2.5; // 創(chuàng)建一個表示2.5毫秒的duration對象 std::chrono::duration<float, std::ratio<1>> duration3 = duration1 + duration2; // 創(chuàng)建一個表示3秒的duration對象
3.訪問duration的值:
可以使用成員函數(shù)count()來訪問Duration對象的值。count()函數(shù)返回Duration對象表示的時間段值,以它所定義的時間單位返回。例如:
std::chrono::duration<int, std::milli> duration(500); int milliseconds = duration.count(); // 返回500
4.操作duration:
可以使用各種數(shù)學(xué)運算符對duration對象進行加法、減法、乘法和除法等操作。這些操作在邏輯上保持了時間單位的一致性。例如:
std::chrono::duration<int, std::milli> duration1(500); std::chrono::duration<double, std::nano> duration2(1.5); std::chrono::duration<int, std::micro> duration3 = duration1 + duration2; // 表示501.5微秒 std::chrono::duration<int, std::milli> duration4 = duration1 * 2; // 表示1000毫秒 std::chrono::duration<double, std::milli> duration5 = duration2 / 2; // 表示0.75毫秒
5.比較duration:
可以使用比較運算符(<、<=、>、>=、==、!=)來比較duration對象之間的大小關(guān)系。比較操作是基于Duration對象所表示的時間單位進行的。例如:
std::chrono::duration<int, std::milli> duration1(500); std::chrono::duration<double, std::nano> duration2(1.5); bool result = duration1 > duration2; // 返回true,因為500毫秒大于1.5納秒
3.2、duration的各種單位和精度選項
時間單位(Time Units)。時間單位表示Duration所表示時間間隔的度量單位。時間單位包括:
- 納秒(nanoseconds):std::chrono::nanoseconds
- 微秒(microseconds):std::chrono::microseconds
- 毫秒(milliseconds):std::chrono::milliseconds
- 秒(seconds):std::chrono::seconds
- 分鐘(minutes):std::chrono::minutes
- 小時(hours):std::chrono::hours
這些單位可以提供不同精度的時間間隔表示。
精度(Precision):
精度表示duration所使用的數(shù)值類型,可以是整型(整數(shù)類型)或浮點型(浮點數(shù)類型)??梢允褂脴藴蕯?shù)值類型(如int、long、float、double)作為Duration的數(shù)值類型,并與所選的時間單位進行配對。
例如,可以選擇使用以下精度選項:
- 整數(shù)類型精度:std::chrono::duration<int, TimeUnit>
- 長整數(shù)類型精度:std::chrono::duration<long, TimeUnit>
- 浮點類型精度:std::chrono::duration<float, TimeUnit>
- 雙精度類型精度:std::chrono::duration<double, TimeUnit>
例如,如果需要表示毫秒級別的時間間隔,可以選擇std::chrono::duration<int, std::milli>,它使用整數(shù)類型表示毫秒。
下面是一些示例,展示了如何使用不同的時間單位和精度選項:
using namespace std::chrono; // 表示10毫秒的duration,使用整數(shù)類型精度 duration<int, std::milli> duration1(10); // 表示5秒的duration,使用長整數(shù)類型精度 duration<long, std::seconds> duration2(5); // 表示2.5秒的duration,使用浮點類型精度 duration<float, std::seconds> duration3(2.5); // 表示1分鐘的duration,使用雙精度類型精度 duration<double, std::minutes> duration4(1); // 可以使用auto關(guān)鍵字自動推導(dǎo)出duration的類型 auto duration5 = duration<int, std::micro>(100);
3.3、使用示例
以下是一些使用Duration的具體示例,涵蓋時間計算和延時操作:
時間計算示例:
#include <iostream> #include <chrono> int main() { using namespace std::chrono; // 創(chuàng)建兩個時間點 steady_clock::time_point start = steady_clock::now(); std::this_thread::sleep_for(std::chrono::seconds(2)); // 模擬耗時操作 steady_clock::time_point end = steady_clock::now(); // 計算時間間隔 duration<double> duration = duration_cast<duration<double>>(end - start); // 輸出時間間隔 std::cout << "Elapsed time: " << duration.count() << " seconds\n"; return 0; }
上述示例中,使用steady_clock來獲取當前時間點,并通過duration_cast將時間間隔轉(zhuǎn)換為秒。最后,使用count()函數(shù)獲取時間間隔的值并進行輸出。
延時操作示例:
#include <iostream> #include <chrono> #include <thread> int main() { using namespace std::chrono; std::cout << "Start" << std::endl; // 進行延時操作,暫停程序執(zhí)行 std::this_thread::sleep_for(std::chrono::seconds(2)); std::cout << "End" << std::endl; return 0; }
使用this_thread::sleep_for函數(shù)來進行延時操作,程序會暫停執(zhí)行2秒鐘,然后繼續(xù)往下執(zhí)行。
四、time_point的使用詳解
4.1、time_point表示具體時間點的概念和使用方法
time_point(時間點)是std::chrono庫中用于表示具體時間的類型。它表示了某個具體時刻的時間點,可以用于比較不同時間點的時間先后或時間間隔的計算。
time_point由兩部分組成:時鐘(Clock)和表示時間的持續(xù)時間(Duration)。
1.時鐘(Clock):
時鐘是std::chrono庫中的一種類型,用于測量時間的流逝。std::chrono庫提供了幾種不同的時鐘類型,包括steady_clock(穩(wěn)定時鐘)、system_clock(系統(tǒng)時鐘)和high_resolution_clock(高分辨率時鐘)等。不同的時鐘類型提供了不同的時間精度和適用范圍。
2.表示時間的持續(xù)時間(Duration):
Duration表示時間的長度或時間間隔,可以是納秒、微秒、毫秒、秒、分鐘、小時等不同的時間單位。Duration類的模板參數(shù)指定了時間長度的數(shù)值類型和時間單位。
使用方法:
要創(chuàng)建一個time_point對象,需要指定時鐘類型和持續(xù)時間??梢允褂卯斍暗臅r鐘來獲取當前時間點,也可以根據(jù)需求指定一個特定的時間點。示例:
#include <iostream> #include <chrono> int main() { using namespace std::chrono; // 使用系統(tǒng)時鐘獲取當前時間點 std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); // 創(chuàng)建一個表示特定時間點的time_point std::chrono::system_clock::time_point specific_time = std::chrono::system_clock::time_point(std::chrono::seconds(1625100000)); // 比較兩個時間點的先后 if (now > specific_time) { std::cout << "The current time is later than the specific time.\n"; } else { std::cout << "The current time is earlier than the specific time.\n"; } // 計算時間間隔 std::chrono::duration<double> duration = now - specific_time; std::cout << "The duration between the two time points is: " << duration.count() << " seconds.\n"; return 0; }
通過std::chrono庫中的system_clock獲取了當前時間點,并通過手動指定一個特定的時間點。然后,可以比較這兩個時間點的先后,并計算它們之間的時間間隔。
4.2、time_point與duration之間的關(guān)系
time_point表示一個具體的時間點,可以視為時間的參考點或標記。它由兩個組成部分構(gòu)成:時鐘(Clock)和持續(xù)時間(Duration)。時鐘指定了時間的基準和精度,而持續(xù)時間表示兩個時間點之間的時間間隔。
duration表示一個時間長度或時間間隔,它可以是納秒、微秒、毫秒、秒、分鐘、小時等不同的時間單位。
duration模板類的參數(shù)指定了時間長度的數(shù)值類型和時間單位。持續(xù)時間的正負值決定了時間間隔是向前還是向后。
time_point和duration之間的關(guān)系:
- 通過time_point和duration的組合,可以表示一個時間點,也可以計算兩個時間點之間的時間間隔。
- 可以在time_point上添加或減去某個duration,以獲得新的time_point。例如,可以將一個time_point向前推進一個duration,或者將一個duration加上一個time_point來計算未來的時間點。
- 可以通過計算兩個time_point之間的時間間隔,得到一個duration對象。這是通過減去一個time_point(較早的時間點)從另一個time_point(較晚的時間點)來實現(xiàn)的。
下面是一個使用time_point和duration的示例,展示了它們之間的關(guān)系:
#include <iostream> #include <chrono> int main() { using namespace std::chrono; // 獲取當前時間點 system_clock::time_point start = system_clock::now(); // 進行一些耗時操作 std::this_thread::sleep_for(std::chrono::seconds(2)); // 獲取后續(xù)的時間點 system_clock::time_point end = system_clock::now(); // 計算時間間隔 duration<double> duration = duration_cast<duration<double>>(end - start); // 輸出時間間隔 std::cout << "Elapsed time: " << duration.count() << " seconds\n"; return 0; }
說明:使用system_clock獲取了開始和結(jié)束的時間點,然后通過減法操作計算時間間隔duration。最后,使用duration的count()方法獲取時間間隔的值,并輸出結(jié)果。這個示例演示了如何結(jié)合使用time_point和duration來計算時間間隔。
4.3、如何創(chuàng)建、比較和操作time_point對象
演示了如何創(chuàng)建、比較和操作time_point對象:
#include <iostream> #include <chrono> int main() { using namespace std::chrono; // 創(chuàng)建一個time_point對象 - 使用系統(tǒng)時鐘獲取當前時間點 system_clock::time_point now = system_clock::now(); // 創(chuàng)建一個time_point對象 - 手動指定一個特定時間點 system_clock::time_point specific_time = system_clock::time_point(seconds(1625100000)); // 比較兩個time_point對象的先后 if (now > specific_time) { std::cout << "The current time is later than the specific time.\n"; } else { std::cout << "The current time is earlier than the specific time.\n"; } // 操作time_point對象,計算時間間隔 system_clock::time_point future = now + hours(48); duration<double> duration = duration_cast<duration<double>>(future - now); std::cout << "The duration between now and future is: " << duration.count() << " seconds.\n"; return 0; }
說明:使用system_clock獲取了當前時間點,并通過手動指定一個特定的時間點創(chuàng)建了另一個time_point對象。然后,比較這兩個time_point對象的先后關(guān)系,并輸出結(jié)果。接下來,操作time_point對象,通過將一個duration(48小時)加到當前時間點上,得到一個未來的時間點。最后,我們計算了當前時間點和未來時間點之間的時間間隔,并輸出結(jié)果。
注意:在計算時間間隔時,使用了duration_cast將時間間隔轉(zhuǎn)換為所需的duration類型(在這里是double類型)。
五、clock的使用詳解
5.1、不同類型的clock
在std::chrono庫中,存在三種不同類型的時鐘:system_clock、steady_clock和high_resolution_clock。它們都用于表示時間點和測量時間間隔,但在實際應(yīng)用中會有一些區(qū)別。
1.system_clock:
- system_clock是系統(tǒng)級別的時鐘,它表示實時時鐘,也就是指示當前時間的時鐘。它的時間點是與系統(tǒng)的時鐘相關(guān)聯(lián)的,可能受到時鐘調(diào)整和時區(qū)的影響。
- system_clock用于獲取當前的系統(tǒng)時間,可以用來進行日常時間計算和顯示。它通常被用作默認的時鐘類型。
- system_clock的最小時間單位取決于系統(tǒng),可能是秒、毫秒或微秒。
2.steady_clock:
- steady_clock是一個單調(diào)遞增的時鐘,不受任何時鐘調(diào)整或時區(qū)的影響。它提供了一個穩(wěn)定、可靠的時間基準,適合用于測量時間間隔和計算算法的執(zhí)行時間。
- steady_clock的最小時間單位取決于實現(xiàn),通常是納秒或微秒級別。
3.high_resolution_clock:
- high_resolution_clock是一個可用于測量小時間間隔的時鐘。它通常使用最高分辨率的時鐘源來提供更高的時間精度。在大部分平臺上,high_resolution_clock是steady_clock的別名,因此也是一個單調(diào)遞增的時鐘。
- high_resolution_clock的最小時間單位取決于實現(xiàn),通常是納秒或微秒級別。
使用不同類型的時鐘的示例:
#include <iostream> #include <chrono> int main() { using namespace std::chrono; // 使用system_clock獲取當前時間 system_clock::time_point system_now = system_clock::now(); // 使用steady_clock獲取開始時間 steady_clock::time_point steady_start = steady_clock::now(); // 一些操作... // 使用steady_clock獲取結(jié)束時間 steady_clock::time_point steady_end = steady_clock::now(); // 使用high_resolution_clock獲取開始時間 high_resolution_clock::time_point high_res_start = high_resolution_clock::now(); // 一些操作... // 使用high_resolution_clock獲取結(jié)束時間 high_resolution_clock::time_point high_res_end = high_resolution_clock::now(); // 輸出時間間隔 duration<double> steady_duration = duration_cast<duration<double>>(steady_end - steady_start); duration<double> high_res_duration = duration_cast<duration<double>>(high_res_end - high_res_start); std::cout << "Steady duration: " << steady_duration.count() << " seconds.\n"; std::cout << "High resolution duration: " << high_res_duration.count() << " seconds.\n"; return 0; }
說明:使用system_clock獲取了當前時間,使用steady_clock和high_resolution_clock獲取了開始和結(jié)束時間。然后,通過減法操作計算了時間間隔,并使用duration_cast將時間間隔轉(zhuǎn)換為double類型的秒數(shù)。最后,輸出了steady_clock和high_resolution_clock的時間間隔。
5.2、每種clock的特點和適用場景
不同類型的時鐘(system_clock、steady_clock和high_resolution_clock)具有不同的特點和適用場景
1.system_clock:
特點:system_clock是一個系統(tǒng)級別的時鐘,用于表示實時時鐘,它的時間點是與系統(tǒng)相關(guān)聯(lián)的。它可以受到時鐘調(diào)整和時區(qū)的影響。
適用場景:system_clock適用于獲取當前的系統(tǒng)時間、進行日常時間計算和顯示。它通常被用作默認的時鐘類型。
2.steady_clock:
特點:steady_clock是一個單調(diào)遞增的時鐘,不受任何時鐘調(diào)整或時區(qū)的影響,提供了一個穩(wěn)定、可靠的時間基準。
適用場景:steady_clock適用于測量時間間隔、計算算法的執(zhí)行時間等希望得到穩(wěn)定和可靠時間測量的場景。由于不受時鐘調(diào)整的影響,它特別適合用于計算程序的運行時間、測量短時間間隔等要求精確性的計時操作。
3.high_resolution_clock:
特點:high_resolution_clock是一個可用于測量小時間間隔的時鐘,通常使用最高分辨率的時鐘源來提供更高的時間精度。在大部分平臺上,high_resolution_clock是steady_clock的別名,因此也是一個單調(diào)遞增的時鐘。
適用場景:high_resolution_clock可以用于需要更高時間精度的場景,比如測量微小的時間間隔、對性能進行優(yōu)化的任務(wù),或者需要盡可能精確的時間測量。
注意:不同的平臺可能對這些時鐘的實現(xiàn)有所不同,最小時間單位也可能有所不同??梢允褂胐uration_cast將時間間隔轉(zhuǎn)換為所需的時間單位(例如秒、毫秒、納秒等)。
如果需要表示當前實時時間、進行日常時間計算和顯示,可以使用system_clock。而如果需要測量時間間隔、計算算法的執(zhí)行時間等,可以使用steady_clock。如果需要更高的時間精度,可以使用high_resolution_clock。
六、應(yīng)用示例
定時任務(wù)。可以使用std::this_thread::sleep_for函數(shù)來創(chuàng)建定時任務(wù)。每隔一秒打印一次消息的示例:
#include <iostream> #include <chrono> #include <thread> int main() { while (true) { std::cout << "Hello, World!" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); } }
測量代碼執(zhí)行時間:使用std::chrono::steady_clock可以測量代碼塊的執(zhí)行時間。測量排序算法的執(zhí)行時間:
#include <iostream> #include <chrono> #include <vector> #include <algorithm> int main() { std::vector<int> nums = {5, 2, 8, 1, 9}; auto start = std::chrono::steady_clock::now(); std::sort(nums.begin(), nums.end()); auto end = std::chrono::steady_clock::now(); std::chrono::duration<double> diff = end - start; std::cout << "Sorting took " << diff.count() << " seconds." << std::endl; return 0; }
使代碼跨平臺。使用std::chrono可以實現(xiàn)跨平臺的時間處理,避免依賴于特定平臺的系統(tǒng)調(diào)用。獲取當前時間點并打印出來:
#include <iostream> #include <chrono> int main() { auto now = std::chrono::system_clock::now(); std::time_t time = std::chrono::system_clock::to_time_t(now); std::cout << "Current time: " << std::ctime(&time) << std::endl; return 0; }
時間格式化:std::chrono庫提供了一些用于格式化時間的函數(shù)和類??梢允褂胹td::put_time函數(shù)將時間對象格式化為字符串,并指定所需的時間格式。它接受一個時間對象和格式化字符串作為參數(shù),返回一個格式化后的字符串。示例代碼如下:
#include <iostream> #include <chrono> #include <iomanip> int main() { auto now = std::chrono::system_clock::now(); std::time_t t = std::chrono::system_clock::to_time_t(now); std::cout << "Current time: " << std::put_time(std::localtime(&t), "%c") << std::endl; return 0; }
說明:將當前時間格式化為日期和時間的字符串,并以本地時間格式(“%c”)進行輸出。
總結(jié)
C++的std::chrono時間庫提供了處理時間相關(guān)操作的功能。
核心概念:
時鐘(Clock):表示時間的源頭,提供了時間的基準和刻度。常見的時鐘有系統(tǒng)時鐘(system_clock)、穩(wěn)定時鐘(steady_clock)和高精度時鐘(high_resolution_clock)。
時間點(Time Point):表示特定時鐘上的一個時間。時間點可使用時鐘的成員函數(shù)now()獲取,也可以通過時鐘的to_time_point()函數(shù)從時間表示轉(zhuǎn)換得到。
時間間隔(Duration):表示一段時間的表示,可以是秒、毫秒、微秒、納秒等等。時間間隔的類型為duration,比如duration<int, std::ratio<1, 1000>>表示毫秒。
使用方法:
獲取當前時間點:使用時鐘的now()成員函數(shù)可以獲取當前時間點,返回一個時間點對象。
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
計算時間間隔:使用時間點對象相減可以計算時間間隔,返回一個時間間隔對象。
std::chrono::duration<double> diff = end - start; double seconds = diff.count();
休眠指定時間:使用std::this_thread::sleep_for()函數(shù)可以使當前線程休眠指定的時間間隔。
std::this_thread::sleep_for(std::chrono::seconds(1));
轉(zhuǎn)換時間表示:可以通過時鐘的成員函數(shù)to_time_t()將時間點對象轉(zhuǎn)換為time_t表示,或使用ctime()函數(shù)將time_t轉(zhuǎn)換為字符串表示。
std::time_t time = std::chrono::system_clock::to_time_t(now); std::cout << "Current time: " << std::ctime(&time) << std::endl;
以上就是C++中std::chrono時間庫的全面解析的詳細內(nèi)容,更多關(guān)于C++ std::chrono時間庫的資料請關(guān)注腳本之家其它相關(guān)文章!
- C++中std::find函數(shù)介紹和使用場景
- C++中std::count函數(shù)介紹和使用場景
- C++ std::any的模擬實現(xiàn)
- C++中std::is_object的具體使用
- 深入理解C++中std::chrono庫的使用
- C++17中std::byte的具體使用詳解
- C++ std::make_unique和std::make_shared用法小結(jié)
- C++筆記之std::future的用法小結(jié)
- C++ std::unique_lock 用法實例詳解
- C++的std::transform()的實現(xiàn)
- C++中std::sort函數(shù)介紹和使用場景