c++11chrono全面解析(最高可達(dá)納秒級別的精度)_第1頁
c++11chrono全面解析(最高可達(dá)納秒級別的精度)_第2頁
c++11chrono全面解析(最高可達(dá)納秒級別的精度)_第3頁
c++11chrono全面解析(最高可達(dá)納秒級別的精度)_第4頁
c++11chrono全面解析(最高可達(dá)納秒級別的精度)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第c++11chrono全面解析(最高可達(dá)納秒級別的精度)(2)時間點(diǎn)有個重要的函數(shù):durationtime_since_epoch()(用于獲取當(dāng)前時間點(diǎn)距離時間戳的時間長度)

即經(jīng)常用來得到當(dāng)前時間點(diǎn)到1970年1月1日00:00的時間距離、該函數(shù)返回的duration的精度和構(gòu)造time_point的時鐘(Clock)有關(guān)(見4時鐘詳解)。

#includeiostream

#includechrono

#includectime

usingnamespacestd;

intmain()

//距離時間戳2兩秒

chrono::time_pointchrono::system_clock,chrono::secondstp(chrono::seconds(2));

couttoepoch:tp.time_since_epoch().count()sendl;

//轉(zhuǎn)化為ctime,打印輸出時間點(diǎn)

time_ttt=chrono::system_clock::to_time_t(tp);

chara[50];

ctime_s(a,sizeof(a),tt);

couta;

system(pause

return0;

}

可以看出,時間戳就是使用的Unix的時間戳。

4.時鐘:(代表當(dāng)前系統(tǒng)的時間)

chrono中有三種時鐘:system_clock,steady_clock和high_resolution_clock。每一個clock類中都有確定的time_point,duration,Rep,Period類型。

system_clock是不穩(wěn)定的。因為時鐘是可調(diào)的,即這種是完全自動適應(yīng)本地賬戶的調(diào)節(jié)。這種調(diào)節(jié)可能造成的是,首次調(diào)用now()返回的時間要早于上次調(diào)用now()所返回的時間,這就違反了節(jié)拍頻率的均勻分布。穩(wěn)定鬧鐘對于超時的計算很重要,所以C++標(biāo)準(zhǔn)庫提供一個穩(wěn)定時鐘std::chrono::steady_clock。std::chrono::high_resolution_clock是標(biāo)準(zhǔn)庫中提供的具有最小節(jié)拍周期(因此具有最高的精度的時鐘)。

上文所說time_since_epoch(),以及將要介紹的now()函數(shù)的返回值都依賴于時鐘的精度,測試時鐘的精度的一種方法就是:

#includeiostream

#includechrono

usingnamespacestd;

intmain()

coutsystemclock:

coutchrono::system_clock::period::num/chrono::system_clock::period::densendl;

coutsteadyclock:

coutchrono::steady_clock::period::num/chrono::steady_clock::period::densendl;

couthighresolutionclock:

coutchrono::high_resolution_clock::period::num/chrono::high_resolution_clock::period::densendl;

system(pause

return0;

}

windows系統(tǒng)的測試結(jié)果是system_clock的精度是100納秒,而high_resolution的精度是1納秒,對于程序來說,一般毫秒級就夠了,所以說chrono提供的時鐘精度綽綽有余。

(1)成員函數(shù)statictime_pointnow()noexcept;用于獲取系統(tǒng)的當(dāng)前時間。

(2)由于各種time_point表示方式不同,chrono也提供了相應(yīng)的轉(zhuǎn)換函數(shù)time_point_cast。

templateclassToDuration,classClock,classDuration

time_pointClock,ToDurationtime_point_cast(consttime_pointClock,Durationtp);

傳一個要轉(zhuǎn)換為的精度的duration模板參數(shù)和一個要轉(zhuǎn)換的time_point參數(shù)(用法見下面綜合應(yīng)用)

(3)其他成員函數(shù):

to_time_t()time_point轉(zhuǎn)換成time_t秒

from_time_t()從time_t轉(zhuǎn)換成time_point

綜合應(yīng)用:

輸出當(dāng)前時間,并且計算當(dāng)前的時間距離1970年1月1日00:00的毫秒數(shù)

#includeiostream

#includechrono

#includectime

usingnamespacestd;

intmain()

//定義毫秒級別的時鐘類型

typedefchrono::time_pointchrono::system_clock,chrono::millisecondsmicroClock_type;

//獲取當(dāng)前時間點(diǎn),windowssystem_clock是100納秒級別的(不同系統(tǒng)不一樣,自己按照介紹的方法測試),所以要轉(zhuǎn)換

microClock_typetp=chrono::time_point_castchrono::milliseconds(chrono::system_clock::now());

//轉(zhuǎn)換為ctime.用于打印顯示時間

time_ttt=chrono::system_clock::to_time_t(tp);

char_time[50];

ctime_s(_time,sizeof(_time),tt);

coutnowtimeis:_time;

//計算距離1970-1-1,00:00的時間長度,因為當(dāng)前時間點(diǎn)定義的精度為毫秒,所以輸出的是毫秒

coutto1970-1-1,00:00tp.time_since_epoch().count()msendl;

system(pause

return0;

}

通過兩張圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論