在咱們寫程序過程當中,有時候須要測試咱們的程序語句執行時間的耗時,當前也是有不少的庫提供咱們去使用,一直沒有良好的跨平臺的庫能夠提供出來;並且通常這種代碼也是由咱們程序員本身調用系統的庫來進行,可是每每會出現精度不足和不支持跨平臺等問題;ios
他來了。。。他來了。。,他踩着七彩祥雲來了;「他」就是C++11中引進boost中的chrono庫;他可實現高精度時鐘,能夠作到納秒級;程序員
在C++11中,是標準模板庫中與時間有關的頭文件。該頭文件中全部函數與類模板均定義在std::chrono
命名空間中;bash
這裏主要介紹時間點和時鐘兩個點:服務器
通常計時器就是從某個時間點開始,而後到某個時間點之間的計數,就是咱們通常稱之爲耗時;微信
時間點:函數
template <class Clock, class Duration = typename Clock::duration>
class time_point;
複製代碼
std::chrono::time_point 表示一個具體時間學習
第一個模板參數Clock用來指定所要使用的時鐘,在標準庫中有三種時鐘,分別爲:測試
第二個模板函數參數用來表示時間的計量單位(特化的std::chrono::duration<> )優化
時間點都有一個時間戳,即時間原點。chrono庫中採用的是Unix的時間戳1970年1月1日 00:00。因此time_point也就是距離時間戳(epoch)的時間長度(duration)。ui
知道了這些,咱們去實現一下開始說的高精度計時器:
#ifndef _TimerClock_hpp_
#define _TimerClock_hpp_
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
class TimerClock
{
public:
TimerClock()
{
update();
}
~TimerClock()
{
}
void update()
{
_start = high_resolution_clock::now();
}
//獲取秒
double getTimerSecond()
{
return getTimerMicroSec() * 0.000001;
}
//獲取毫秒
double getTimerMilliSec()
{
return getTimerMicroSec()*0.001;
}
//獲取微妙
long long getTimerMicroSec()
{
//當前時鐘減去開始時鐘的count
return duration_cast<microseconds>(high_resolution_clock::now() - _start).count();
}
private:
time_point<high_resolution_clock>_start;
};
#endif
複製代碼
測試:
#include "TimerClock.hpp"
int main()
{
TimerClock TC;
int sum = 0;
TC.update();
for (int i = 0; i > 100000; i++)
{
sum++;
}
cout << "cost time:" << TC.getTimerMilliSec() <<"ms"<< endl;
cout << "cost time:" << TC.getTimerMicroSec() << "us" << endl;
return 0;
}
複製代碼
結果:
相似這種比較高精度的測試,咱們可使用在咱們項目代碼中進行使用,能夠計算出咱們程序的耗時,能夠進行優化;
想了解學習更多C++後臺服務器方面的知識,請關注: 微信公衆號:====CPP後臺服務器開發====