C++11時間日期庫chrono的使用

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是一個分數模板類,第一個參數為分子,第二個參數為分母;通過靜態成員可獲取:

  • num:分子

  • den:分母

typedef ratio<1, 1000> milli;
typedef ratio<1000, 1> kilo;
cout<<milli::den<<endl; // 1000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36976.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue中router路由的原理?兩種路由模式如何實現?(vue2) -(上)

平時我們編寫路由時&#xff0c;通常直接下載插件使用&#xff0c;在main.js文件中引入直接通過引入vue-router中的Router通過Vue.use使用以后定義一個routeMap數組&#xff0c;里邊是我們編寫路由的地方&#xff0c;最后通過實例化一個 Router實例 將routes我們定義的routeMao…

Docker中部署Nginx

1.Nginx部署需求 2.操作教程 3.實際步驟 把配置粘過來。

客戶端遠程啟動服務器腳本文件

目錄 軟件需求 實現 方法1 方法2 方法3 軟件需求 有兩臺計算機&#xff0c;一臺是linux客戶端&#xff0c;另一臺是linux服務器。要求操作員可以在客戶端遠程啟動服務器上的腳本文件&#xff0c;控制服務器。 實現 方法1 客戶端通過ssh登錄服務器&#xff0c;然后通過…

Cookie、Session、Token的區別

有人或許還停留在它們只是驗證身份信息的機制&#xff0c;但是它們之間的關系你真的弄懂了么&#xff1f; 發展史&#xff1a; Coolie: Netscape Communications 公司引入了 Cookie 概念&#xff0c;作為在客戶端存儲狀態信息的一種方法。初始目的是為了解決 HTTP 的無狀態性…

Python爬蟲:單線程、多線程、多進程

前言 在使用爬蟲爬取數據的時候&#xff0c;當需要爬取的數據量比較大&#xff0c;且急需很快獲取到數據的時候&#xff0c;可以考慮將單線程的爬蟲寫成多線程的爬蟲。下面來學習一些它的基礎知識和代碼編寫方法。 一、進程和線程 進程可以理解為是正在運行的程序的實例。進…

python爬蟲數據解析xpath、jsonpath,bs4

數據的解析 解析數據的方式大概有三種 xpathJsonPathBeautifulSoup xpath 安裝xpath插件 打開谷歌瀏覽器擴展程序&#xff0c;打開開發者模式&#xff0c;拖入插件&#xff0c;重啟瀏覽器&#xff0c;ctrlshiftx&#xff0c;打開插件頁面 安裝lxml庫 安裝在python環境中的Scri…

劍指Offer61.撲克牌中的順子 C++

1、題目描述 從若干副撲克牌中隨機抽 5 張牌&#xff0c;判斷是不是一個順子&#xff0c;即這5張牌是不是連續的。2&#xff5e;10為數字本身&#xff0c;A為1&#xff0c;J為11&#xff0c;Q為12&#xff0c;K為13&#xff0c;而大、小王為 0 &#xff0c;可以看成任意數字。…

并發服務器模型,多線程并發

一、多線程并發完整代碼 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> #include <…

突然讓做性能測試?試試RunnerGo

當前&#xff0c;性能測試已經是一名軟件測試工程師必須要了解&#xff0c;甚至熟練使用的一項技能了&#xff0c;在工作時可能每次發版都要跑一遍性能&#xff0c;跑一遍自動化。性能測試入門容易&#xff0c;深入則需要太多的知識量&#xff0c;今天這篇文章給大家帶來&#…

Rocky Linux更換為國內源

Rocky Linux提供的可供切換的源列表&#xff1a;Mirrors - Mirror Manager 其中以 COUNTRY 列為 CN 的是國內源。 選擇其中一個Rocky Linux 源使用幫助 — USTC Mirror Help 文檔 操作前請做好備份 對于 Rocky Linux 8&#xff0c;使用以下命令替換默認的配置 sed -e s|^mirr…

新能源汽車電控系統

新能源汽車電控系統主要分為&#xff1a;三電系統電控系統、高壓系統電控系統、低壓系統電控系統 三電系統電控系統 包括整車控制器、電池管理系統、驅動電機控制器等。 整車控制器VCU 整車控制器作為電動汽車中央控制單元&#xff0c;是整個控制系統的核心&#xff0c;也是…

zabbix監控mysql數據庫、nginx、Tomcat

zabbix監控mysql數據庫、nginx、Tomcat 一.zabbix監控mysql數據庫 1.環境規劃 hostIP部署zabbix-server192.168.198.17zabbix服務器搭建zabbix-mysql192.168.198.15zabbix客戶端搭建 2.zabbix-server安裝部署&#xff08;192.168.198.17&#xff09; 請參考以下配置&#…

Azure概念介紹

云計算定義 云計算是一種使用網絡進行存儲和處理數據的計算方式。它通過將數據和應用程序存儲在云端服務器上&#xff0c;使用戶能夠通過互聯網訪問和使用這些資源&#xff0c;而無需依賴于本地硬件和軟件。 發展歷史 云計算的概念最早可以追溯到20世紀60年代的時候&#x…

mysql 分庫分表淺析

分表是分散數據庫壓力的好方法。 分表&#xff0c;最直白的意思&#xff0c;就是將一個表結構分為多個表&#xff0c;然后&#xff0c;可以再同一個庫里&#xff0c;也可以放到不同的庫。 當然&#xff0c;首先要知道什么情況下&#xff0c;才需要分表。個人覺得單表記錄條數達…

2023河南萌新聯賽第(五)場:鄭州輕工業大學C-數位dp

鏈接&#xff1a;登錄—專業IT筆試面試備考平臺_牛客網 給定一個正整數 n&#xff0c;你可以對 n 進行任意次&#xff08;包括零次&#xff09;如下操作&#xff1a; 選擇 n 上的某一數位&#xff0c;將其刪去&#xff0c;剩下的左右部分合并。例如 123&#xff0c;你可以選擇…

年至年的選擇仿elementui的樣式

組件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 時間選擇年 - 年 --> <template><div class"yearPicker"…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一個現代 Vanilla JS 和 ES6 庫以及下一代前端框架。企業級 Web 組件包括輔助功能&#xff08;WAI-ARIA、第 508 節/WCAG 合規性&#xff09;、本地化、從右到左鍵盤導航和主題。與 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

九、多態(2)

本章概要 構造器和多態 構造器調用順序繼承和清理構造器內部多態方法的行為 協變返回類型使用繼承設計 替代 vs 擴展向下轉型與運行時類型信息 構造器和多態 通常&#xff0c;構造器不同于其他類型的方法。在涉及多態時也是如此。盡管構造器不具有多態性&#xff08;事實上…

【JavaScript】new 的原理以及實現

網道 - new 命令的原理 使用new命令時&#xff0c;它后面的函數依次執行下面的步驟。 創建一個空對象&#xff0c;作為將要返回的對象實例。將這個空對象的原型&#xff0c;指向構造函數的prototype屬性。將這個空對象賦值給函數內部的this關鍵字。如果構造函數返回了一個對象…

版本動態 | SolidUI 0.2.0 版本發布

SolidUI 一句話生成任何圖形 背景 隨著文本生成圖像的語言模型興起&#xff0c;SolidUI想幫人們快速構建可視化工具&#xff0c;可視化內容包括2D,3D,3D場景&#xff0c;從而快速構三維數據演示場景。SolidUI 是一個創新的項目&#xff0c;旨在將自然語言處理&#xff08;NLP&…