網站首頁 編程語言 正文
chrono是C++11中新加入的時間日期操作庫,可以方便地進行時間日期操作,主要包含了:duration, time_point, clock。
時鐘與時間點
chrono中用time_point模板類表示時間點,其支持基本算術操作;不同時鐘clock分別返回其對應類型的時間點。
clock
時鐘是從一個時點開始,按照某個刻度的計數;chrono同時提供了三種時鐘(通過now()獲取當前時間點):
- system_clock:系統時鐘,相對epoch(1970-01-01 00:00:00UTC)的時間間隔;
- steady_clock:單調時鐘,只能增長(后一次調用now()得到的時間總是比前一次的值大);一般是相對于系統啟動時間的時間間隔;
- high_resolution_clock:高精度時鐘(當前系統能提供的最高精度時鐘,很可能就是steady_clock),也是單調的;
需要得到絕對時點的場景使用system_clock;需要得到時間間隔,且不受系統時間修改而受影響時使用steady_clock。
時間顯示
在C++20中直接有to_stream直接輸出system_clock時鐘;但在此之前,只能通過間接的方式來輸出:
auto tNow = system_clock::now(); auto tmNow = system_clock::to_time_t(tNow); auto locNow = std::localtime(&tmNow); cout<<std::put_time(locNow, "%Y-%m-%d %H:%M:%S")<<endl; // 2019-12-20 19:35:12
system_clock::from_time_t(...)可以把time_t類型時間轉換為time_point,便于chrono使用。
運行計時
通過steady_clock/high_resolution_clock可方便的進行計時:
public: ? explicit XRunTime{bool bStart){ ? ? if(bStart) Restart(); ? } ? void Restart(){ ? ? m_tpStart = high_resolution_clock::now(); ? } ? double Stop(){ ? ? return operator()(); ? } ? double operator()(void){ ? ? auto tpEnd = high_resolution_clock::now(); ? ? auto elap = tpEnd - m_tpStart; ? ? return (double)elap.count() / std::nano::den; //返回運行的秒數,如1.00345 ? } }
時間間隔duration
chrono中使用duration模板類來表示時間間隔,并定義了從小時到納秒的時間間隔。
duration模板
duration使用一個數值(表示時鐘數)和分數(ratio)來表示具體間隔。支持基本的算術運算,并通過count()獲取具體的時鐘數。
template<typename _Rep, typename _Period = ratio<1>> struct duration { ? typedef _Rep ? rep; ? constexpr _Rep count() const{ ? ? return (_MyRep); ? } ? ... private: ? _Rep ?_MyRep; ?//時鐘計數 };
基準是秒,并依次定義了常用的間隔,如:
typedef duration<long long> seconds; typedef duration<long long, milli> milliseconds; typedef duration<long long, ratio<3600>> hours;
不同的時間間隔可以直接進行算術運算,如休眠需要毫秒參數,我們可以封裝接收秒與毫秒的接口:
void MySleep(int nSec, int nMillSec){ std::chrono::seconds secs(nSec); std::chrono::milliseconds mills(nMillSec); std::this_thread::sleep_for(secs+mills); }
duration_cast
使用duration_cast可以方便的在不同時間單位間進行轉換,如:
auto sec=seconds(123); auto minu=duration_cast<minutes>(sec); cout<<sec.count()<<","<<minu.count()<<endl; // 123,2
ratio
ratio是一個分數模板類,第一個參數為分子,第二個參數為分母;通過靜態成員可獲?。?/p>
- num:分子
- den:分母
typedef ratio<1, 1000> milli; typedef ratio<1000, 1> kilo; cout<<milli::den<<endl; // 1000
原文鏈接:https://mp.weixin.qq.com/s/KKeabEmLd04iNPYgZS8L2Q
相關推薦
- 2022-03-12 使用VMware虛擬機安裝Linux(CentOS7鏡像)_Linux
- 2022-04-10 C#實現計算器功能_C#教程
- 2022-07-26 分析查詢語句 Explain
- 2022-10-17 QT實現TCP網絡聊天室_C 語言
- 2022-01-17 export和export default的區別
- 2022-09-24 C#中流的使用和分類_C#教程
- 2022-12-21 PyGame實現初始化導入所有模塊方法詳解_python
- 2022-06-10 python?PIL?Image?圖像處理基本操作實例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支