亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中Boost.Chrono時間庫的使用方法

2020-01-26 13:56:07
字體:
來源:轉載
供稿:網友

前言

大家應該都有所體會,時鐘這個東西在程序中扮演者重要的角色,在系統編程的時候睡眠、帶超時的等待、帶超時的條件變量、帶超時的鎖都會用到,但是往往對特定系統依賴性很大,感覺即使不考慮系統的跨平臺性,如果能使用一個穩定的接口,同時如果能夠方便的對時刻、時段等進行相關的操作和運算,將是再好不過的了。

在boost庫中和時間相關的庫有Boost.DateTime和Boost.Chrono,前者專注于時間時刻以及本地化相關的內容,而后者主要是時刻、時長和時間的計算等內容。當然,C++11標準已經支持std::chrono了,但是為了兼容老編譯系統現在很多C++庫和程序都使用boost.chrono作為時間類庫(還有的原因就是std::chrono沒有收錄boost.chrono的所有功能,比如統計CPU使用時間、自定義時間輸出格式等),不過比較可惜的是即便使用boost::chrono作為權宜之計,也需要boost-1.47版本之上才行,而現在比較舊的發行版需要升級boost庫才可以使用。想想現在RHEL-6.x仍然被大規模的部署,而且RedHat要為這貨提供長達十年的技術支持,真不知道啥時候才能順順利利的享受C++11……

Boost.Chrono的時間類型分為duration和time_point,也就是時長和時刻兩類,很多概念和接口都是圍繞這兩個維度去定義和實現的。

一、Clock

clock是Boost.Chrono中的重要概念,而且這些clock都包含一個now()的成員函數,用于返回當前的time_point。Boost.Chrono包含的clock類型有:

  (1) chrono::system_clock 代表系統時間,比如電腦上顯示的當前時間,其特點是這個時間可以被用戶手動設置更新,所以這個時鐘是可以和外部時鐘源同步的。這個時鐘還有一個to_time_t()成員函數,用于返回自1970.1.1開始到某個時間點所經過的秒數,數據類型是std::time_t。這種時鐘通常用來轉換成日歷時間使用。

  (2) chrono::steady_clock 其特點是時間是單調增長的,后一個時刻訪問得到的時間點肯定比之前時刻得到的時間點要晚,即使我們手動將系統時間向前調整了也不會改變這個時鐘穩步向前推行累計,其也被稱為monotonic time,該時鐘是均勻增長且不能被調整,其特性對于很多不允許時間錯亂的系統是十分重要的。chrono::steady_clock通常是基于系統啟動時間來計時的,而且常常用來進行耗時、等待等工作使用。

  (3) chrono::high_resolution_clock 依賴于系統實現,通常是上面兩種時鐘的某個宏定義,取決于哪個時鐘源更為的精確,所以其輸出也決定于取決于上面哪個clock來實現的。

  (4) chrono::process_real_cpu_clock 表示自進程啟動以來使用的CPU時間,而這個數據也可以通過使用std::clock()來獲得。chrono::process_user_cpu_clock、boost::chrono::process_system_cpu_clock表示自進程啟動以來,在用戶態、內核態所花費的時間,而所有的這些事件可以通過chrono::process_cpu_clock來獲得,他返回上面所有時間組成的一個tuple結構。

  (5) chrono::thread_clock 返回基于線程統計的花費時間,而且不區分用戶態、內核態的時間。

二、time_point

time_point代表時間點,其等價于某個時刻(clock)+duration的結果,同時兩個time_point做減法也可以得到一個duration。time_point常見的描述為:3分鐘之后、2038年1月1日10:32:23、定時器啟動后的20ms……

上面的clock都有一個now()成員函數,其返回的就是chrono::time_point類型。這個類型使用一個模板來實現的,所以其實際類型極度依賴于所選擇的時鐘源。

Boost.Chrono有一個chrono::time_point_cast轉換函數,可以顯式從高粒度向低粒度對time_point進行轉換。

chrono::process_real_cpu_clock::time_point p = chrono::process_real_cpu_clock::now();std::cout << chrono::time_point_cast<minutes>(p) << '/n';

三、duration

關于時長,chrono::duration也是一個模板類型,其第一個模板參數表明存儲所用的數據類型(int、long、double等),第二個模板參數表示ratio(比如24、60、1000等)。為了方便用戶的使用,Boost.Chrono提供了duration常用的六種時間類型,且他們都用一個足夠大的整數進行內部保存,其計量值可以用count()成員函數得到:

chrono::nanosecondschrono::milliseconds、chrono::microsecondschrono::seconds、chrono::minuteschrono::hours,而且為這些類型都重載了計算操作符:+、-、<等,方便時間的計算和比較。文檔說傳統的Boost.DateTime是用繼承實現的,相比而言Boost.Chrono更加的簡潔高效,而且和前者保持了一致的接口。

chrono::steady_clock::time_point start = chrono::steady_clock::now();...chrono::duration<double> sec = chrono::steady_clock::now() - start;std::cout << "we took " << sec.count() << " seconds/n";auto go = chrono::steady_clock::now() + chrono::nanoseconds(500); while (chrono::steady_clock::now() < go) ... ;

上面的六種time_point類型表示的維度不一,粗粒度的時長肯定能用細粒度的類型表示,反之則可能丟失精度,所以需要使用chrono::duration_cast()函數做顯式的轉換。

可能上面六種類型的時間不咋的,但重點是現在boost::chrono被廣為使用在boost的其他庫里面,比如我們看一個條件變量的帶超時等待的原型:

template< typename Clock, typename Duration >cv_status wait_until( std::unique_lock< mutex > & lk,      std::chrono::time_point< Clock, Duration > const& abs_time);      template< typename Rep, typename Period >cv_status wait_for( std::unique_lock< mutex > & lk,     std::chrono::duration< Rep, Period > const& rel_time);

這就意味著我們可以直接將chrono::minutes{2}這樣的duration對象丟給這個函數就好了,創建任意精度的時長都很方便,而不用像以前一樣關注函數接口有人用seconds、有人用milliseconds、有人用timeval了。

現在boost庫和標準庫中,基于時間段超時的函數都具有for后綴,而基于時間點超時的變量具有until后綴,比如this_thread::sleep_for()this_thread::sleep_until()類似的還有:wait、try_lock、unique_lock用于條件變量、mutex互斥、unique_lock操作。

四、自定義格式的時間輸出

通過time_fmt()可以對時刻進行格式化輸出,使用的時候需要包含頭文件。

time_fmt(boost::chrono::timezone::local, "%H:%M:%S");time_fmt(boost::chrono::timezone::utc, "%H:%M:%S");

參考

Chapter 37. Boost.Chrono

Chapter 8. Boost.Chrono 2.0.5

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热久久视久久精品18亚洲精品| 日韩av网站大全| 26uuu亚洲国产精品| 亚洲欧洲日产国码av系列天堂| 91亚洲精品视频| 欧美色道久久88综合亚洲精品| 亚洲一区999| 欧美日韩中文字幕日韩欧美| 亚洲一区国产精品| 亚洲最大福利网站| 九九热在线精品视频| 黄色成人av在线| 92看片淫黄大片欧美看国产片| 欧美黄色小视频| 国产91露脸中文字幕在线| 国产欧美婷婷中文| 国产不卡av在线| 国产精品视频区1| 国产精品久久久久久五月尺| 亚洲第一免费播放区| 久久久国产精品亚洲一区| 久久97久久97精品免视看| 亚洲第一区第二区| 性欧美长视频免费观看不卡| 国产精品一区二区性色av| 日韩精品在线视频观看| 国产一区二区三区高清在线观看| 国产精品美女在线| 国产日韩欧美影视| 日韩av在线免费看| 欧美中在线观看| 亚洲人成电影在线| 国产成人精品一区| 欧美富婆性猛交| 丝袜亚洲另类欧美重口| 日韩欧美在线播放| 91在线视频成人| 久久久视频在线| 日韩av在线电影网| 国产成人一区二| 欧美日韩亚洲精品一区二区三区| 成人久久久久久久| 国产不卡精品视男人的天堂| 91豆花精品一区| 色综合天天综合网国产成人网| 色琪琪综合男人的天堂aⅴ视频| 91po在线观看91精品国产性色| 国产日韩换脸av一区在线观看| 91精品美女在线| 久久精品美女视频网站| 精品色蜜蜜精品视频在线观看| 91亚洲精品视频| 97视频com| 欧美成人高清视频| 精品欧美国产一区二区三区| 国产成人精品亚洲精品| 欧美激情视频三区| 国产日韩中文字幕| 97精品视频在线播放| 国产视频丨精品|在线观看| 欧美激情视频网站| 欧美一级大片视频| 91成人精品网站| 成人午夜两性视频| 最近2019中文字幕一页二页| 国产欧美久久一区二区| 欧美日韩午夜视频在线观看| 亚洲区免费影片| 大胆人体色综合| 色婷婷综合成人av| 国产精品久久久久久久av电影| 欧美最猛性xxxx| www.日本久久久久com.| 亚洲欧美综合另类中字| 久久99久久久久久久噜噜| 午夜精品一区二区三区av| 亚洲成avwww人| 欧美日韩中文字幕在线视频| 亚洲欧洲在线视频| 欧美一区二区大胆人体摄影专业网站| 欧美精品在线免费| 中文字幕日韩欧美精品在线观看| 亚洲欧美日韩高清| 最近免费中文字幕视频2019| 成人精品一区二区三区电影免费| 成人黄色在线观看| 欧美人在线观看| 久久精品成人一区二区三区| 亚洲第一免费播放区| 日韩欧美有码在线| 日韩欧美中文字幕在线观看| 最近2019年手机中文字幕| 日韩高清av在线| 免费不卡在线观看av| 欧美性色19p| 国产99在线|中文| 亚洲国产精品va在线看黑人动漫| 久久久久五月天| 中文字幕亚洲无线码a| 韩日精品中文字幕| 亚洲成年人在线播放| 欧美黄色片免费观看| xxxx欧美18另类的高清| 成人福利网站在线观看| 国产精品久久久久久久久男| 91深夜福利视频| 国产精品精品久久久久久| 91久久久久久久久久久久久| 中文字幕亚洲精品| 久久成人国产精品| 91精品国产成人www| 国产91成人在在线播放| 亚洲色图第三页| 欧美刺激性大交免费视频| 欧美日韩国产123| 亚洲第一天堂无码专区| 欧美黄色片免费观看| 日本中文字幕不卡免费| 欧美性猛交xxxxx免费看| 曰本色欧美视频在线| 国产91精品久久久| 久久久黄色av| 91成人精品网站| 性日韩欧美在线视频| www.亚洲男人天堂| 亚洲高清色综合| 日韩av中文字幕在线免费观看| 日韩a**中文字幕| 欧美成人网在线| 超碰97人人做人人爱少妇| 亚洲免费中文字幕| 国产精品欧美激情| 性日韩欧美在线视频| 高跟丝袜欧美一区| 成人做爰www免费看视频网站| 欧美一级高清免费| www.亚洲免费视频| 亚洲少妇激情视频| 1769国产精品| 国色天香2019中文字幕在线观看| 亚洲精品国产精品久久清纯直播| 欧美激情一区二区三区在线视频观看| 91精品久久久久久久久久另类| 狠狠色狠色综合曰曰| 97在线看免费观看视频在线观看| 国产精品18久久久久久首页狼| 国产精品久久久久久av福利软件| 亚洲品质视频自拍网| 北条麻妃一区二区三区中文字幕| 亚洲视频专区在线| 69久久夜色精品国产69乱青草| 日韩av在线影院| 久久九九全国免费精品观看| 亚洲国产欧美自拍| 超碰日本道色综合久久综合| 日韩欧美在线网址| 伊人久久久久久久久久久| 久久99久国产精品黄毛片入口| 久久久久久久久久国产精品| 欧美激情精品久久久久久久变态| 成人女保姆的销魂服务| 久久天天躁狠狠躁夜夜躁| 国产91久久婷婷一区二区| 欧美黄色三级网站|