std::chrono时间库详解
生活随笔
收集整理的這篇文章主要介紹了
std::chrono时间库详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要時間類型
std::ratio<num, den> 定義分式(std::ratio模板請參考《C++新標準之std::ratio》),例如:
std::ratio<60, 1> minutes;//<分子,分母>一分鐘60秒std::ratio<60 * 60> hource;//1小時3600秒std::ratio<1, 1000> milliseconds; //1ms是1/1000秒chrono命名空間定義好的時間單位
typedef duration <Rep, ratio<3600,1>> hours;typedef duration <Rep, ratio<60,1>> minutes;typedef duration <Rep, ratio<1,1>> seconds;typedef duration <Rep, ratio<1,1000>> milliseconds;typedef duration <Rep, ratio<1,1000000>> microseconds;typedef duration <Rep, ratio<1,1000000000>> nanoseconds;- 使用舉例:
- chrono::duration_cast<>() 時間單位轉換
獲取當前時間
time_point 表示一個時間點
- 獲取當前時間
- 格式化打印當前時間
std::put_time用法請參考《std::put_time》
- std::localtime非線程安全,使用localtime_r函數代替
打印程序執行耗時
/** 打印耗時,取變量構造函數與析構函數的時間差,單位ms*/ class SpendTime { public:SpendTime():_curTimePoint(std::chrono::steady_clock::now()){}~SpendTime(){auto curTime = std::chrono::steady_clock::now();auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(curTime - _curTimePoint);cout<<"SpendTime = "<< duration.count() <<"ms"<<endl;}private:std::chrono::steady_clock::time_point _curTimePoint; }; #include <ctime> #include <limits>/** 測量時間流逝* 精度依賴于操作系統或編譯器,具體依賴于std::clock()的返回值精度及CLOCKS_PER_SEC值的定義*/ class Timer { public:Timer() : _startTime(std::clock()){}void Restart(){_startTime = std::clock();}/** 構造函數至今的耗時,單位s*/double Elapsed() const{return double(std::clock() - _startTime) / CLOCKS_PER_SEC;}/** 最小度量,以秒為單位*/double ElapsedMin() const{return double(1) / double(CLOCKS_PER_SEC);}/** 最大度量,以秒為單位*/double ElapsedMax() const{return (double(std::numeric_limits<std::clock_t>::max()) - double(_startTime) / double(CLOCKS_PER_SEC));}private:std::clock_t _startTime;//毫秒級精度 };判斷時間戳是否為當天
#include <iomanip> #include <thread> #include <mutex> #include <iomanip> #include <chrono> #include <time.h>/** 判斷是否是當天,時區問題內部已考慮* @param timeStamp 當前時間戳(單位s)* @return 0 今天* >0 過去幾天* <0 將來幾天*/ int checkTimestamp(const std::time_t timeStamp) {static std::time_t sLastTimestamp = 0;if (sLastTimestamp == 0) {static std::once_flag oc;std::call_once(oc, [&](){tzset();//刷新時區sLastTimestamp = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());});}const int lastDay = (sLastTimestamp - timezone)/86400;//轉換到當前時區,自1970年來的天數const int curDay = (timeStamp - timezone)/86400;sLastTimestamp = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());return (curDay - lastDay); }?
總結
以上是生活随笔為你收集整理的std::chrono时间库详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全民k歌锁屏通知怎么关闭
- 下一篇: Visual Studio 竖向选择功能