c++11 Chrono時間庫的使用小結(jié)
1. 持續(xù)時間 duration
template<class Rep, class Period = ratio<1>> class duration;
class Rep: 滴答數(shù)
class Period: 滴答周期,默認1秒
1) 常用方法
count / zero / min / max
支持算術(shù)運算 + - * / % ++ – += -= *= /= %= (不同的Period之間會自動轉(zhuǎn)換)
2) 示例
duration<long, ratio<60>> d1(2); //2分鐘 duration<long, ratio<1>> d2(30); //30秒 duration<double, ratio<60>> d3 = d1+d2; //2.5分 count << d3.count() << "minutes" << endl;
3) 標準定義
//X 64 bits表示:有符號整數(shù)類型,且位數(shù)至少為64位 typedef duration<X 64 bits, nano> nanoseconds; //納秒 typedef duration<X 55 bits, micro> microseconds; //微秒 typedef duration<X 45 bits, milli> milliseconds; //毫秒 typedef duration<X 35 bits> seconds; //秒 typedef duration<X 29 bits, ratio<60>> minutes; //分 typedef duration<X 23 bits, ratio<3600>> hours; //時 //例 auto t = hours(1) + minutes(2) + seconds(45); count << seconds(t).count() << endl;
2. 時鐘 clock
- system_clock 系統(tǒng)實時時鐘的真實時間
- steady_clock time_point絕不遞減的時鐘
- high_resolution_clock 高精度時鐘
1) 常用接口
// 均為靜態(tài)接口 now() //獲取類型為time_point的當前時間點 to_time_t() //將time_point轉(zhuǎn)換為time_t類型 from_time_t() //將time_t轉(zhuǎn)換為time_point類型
localtime可將time_t類型轉(zhuǎn)換為tm表示的本地時間
2) 示例
//獲取當前時間 #include <time.h> // time_t, locaktime, tm #include <iomanip> // put_time system_clock::time_point tpoint = system_clock::now(); time_t tt = system_clock::to_time_t(tpoint); tm* t = locaktime(&tt); cout << put_time(t, "%H:%M:%S") << endl;
//計算代碼的執(zhí)行時間 auto start = system_clock::now(); // ... to do something auto end = system_clock::now(); auto diff = end - start; cout << duration<double, milli>(diff).count() << "ms" << endl;
3. 時點 time_point
- time_point是一個時間點,存儲相對于紀元(1970/01/01)的一個duration。
- time_since_epoch() 返回當前時間點到紀元的duration。
- 每一個time_point都關(guān)聯(lián)一個clock,創(chuàng)建時需指定clock作為模板參數(shù)。
1) 構(gòu)造函數(shù)
time_point(); //通過duration::zero初始化表示關(guān)聯(lián)clock的紀元 time_point(const duration& d); //通過duration初始化表示紀元+d template<class Duration2> time_point(const time_point<clock, Duration2>& t); //通過t.time_since_epoch初始化
2) 示例
time_point<steady_clock> tp1; tp1 += minutes(10); auto d1 = tp1.time_since_epoch(); duration<double> d2(d1); cout << d2.count() << "seconds" << endl;
獲取時間差
#include <chrono> #include <thread> auto begin = std::chrono::high_resolution_clock::now(); //起始 std::this_thread::sleep_for(std::chrono::milliseconds(800));//運行時長 auto end = std::chrono::high_resolution_clock::now();//結(jié)束 //第一種 使用duration_cast計算 auto duration1 = std::chrono::duration_cast<std::chrono::seconds>(end - begin); auto duration2 = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin); auto duration3 = std::chrono::duration_cast<std::chrono::microseconds>(end - begin); auto duration4 = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); std::cout << duration1.count() << std::endl; //本機測試結(jié)果: 0 std::cout << duration2.count() << std::endl; //本機測試結(jié)果: 812 std::cout << duration3.count() << std::endl; //本機測試結(jié)果: 812698 std::cout << duration4.count() << std::endl; //本機測試結(jié)果: 812698500 //第二種 使用durantion std::chrono::duration<double, std::ratio<1, 1>> elapsed1 = end - begin; std::chrono::duration<double, std::ratio<1, 1000>> elapsed2 = end - begin; std::chrono::duration<double, std::ratio<1, 1000000>> elapsed3 = end - begin; std::chrono::duration<double, std::ratio<1, 1000000000>> elapsed4 = end - begin; std::cout << elapsed1.count() << std::endl; //本機測試結(jié)果: 0.812698 std::cout << elapsed2.count() << std::endl; //本機測試結(jié)果: 812.698 std::cout << elapsed3.count() << std::endl; //本機測試結(jié)果: 812698 std::cout << std::fixed << std::setprecision(0) << elapsed4.count() << std::endl; //本機測試結(jié)果: 812698500
獲取時間戳
//此處要用system_clock auto now = std::chrono::system_clock::now(); //下面用到2種轉(zhuǎn)換方式,一種time_point_cast,一種duration_cast // 獲取時間戳,單位為毫秒 auto ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now).time_since_epoch().count(); // 輸出毫秒時間戳 std::cout << "Milliseconds timestamp: " << ms << std::endl; // 獲取時間戳,單位為秒 auto sec = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count(); // 輸出秒時間戳 std::cout << "Seconds timestamp: " << sec << std::endl;
到此這篇關(guān)于c++11 Chrono時間庫的使用小結(jié)的文章就介紹到這了,更多相關(guān)c++11 Chrono時間庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)
本文主要介紹了VSCODE調(diào)試RDKit內(nèi)核的方法步驟,這個過程可以分為三個部分:安裝 RDKit 所需環(huán)境,安裝 VSCode 相應(yīng)插件, 寫調(diào)試代碼編譯,感興趣的可以了解一下2021-08-08
使用C++設(shè)計開發(fā)一個功能完善的多進程管理器
一個健壯的多進程管理器不僅需要能夠按照依賴順序啟動進程,還要能夠優(yōu)雅地停止進程,并在進程意外崩潰時自動重啟,本文將詳細介紹如何使用C++開發(fā)一個功能完善的多進程管理器,需要的可以了解下2025-10-10
C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式
這篇文章主要介紹了C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

