在我們寫程式過程中,有時候需要測試我們的程式語句執行時間的耗時,當前也是有很多的庫提供我們去使用,一直沒有良好的跨平台的庫可以提供出來;而且一般這種**也是由我們程式設計師自己呼叫系統的庫來進行,但是往往會出現精度不足和不支援跨平台等問題;
他來了。。。他來了。。,他踩著七彩祥雲來了;「他」就是c++11中引進boost中的chrono庫;他可實現高精度時鐘,可以做到納秒級;
在c++11中,是標準模板庫中與時間有關的標頭檔案。該標頭檔案中所有函式與類模板均定義在std::chrono
命名空間中;
這裡主要介紹時間點和時鐘兩個點:
一般計時器就是從某個時間點開始,然後到某個時間點之間的計數,就是我們一般稱之為耗時;
時間點:
template class time_point;
std::chrono::time_point 表示乙個具體時間
第乙個模板引數clock用來指定所要使用的時鐘,在標準庫中有三種時鐘,分別為:
第二個模板函式引數用來表示時間的計量單位(特化的std::chrono::duration<> )
時間點都有乙個時間戳,即時間原點。chrono庫中採用的是unix的時間戳2023年1月1日 00:00。所以time_point也就是距離時間戳(epoch)的時間長度(duration)。
知道了這些,我們去實現一下開始說的高精度計時器:
#ifndef _timerclock_hpp_
#define _timerclock_hpp_
#include #include using namespace std;
using namespace std::chrono;
class timerclock
~timerclock()
void update()
//獲取秒
double gettimersecond()
//獲取毫秒
double gettimermillisec()
//獲取微妙
long long gettimermicrosec()
private:
time_point_start;
};#endif
測試:
#include "timerclock.hpp"
int main()
cout << "cost time:" << tc.gettimermillisec() <
cout << "cost time:" << tc.gettimermicrosec() << "us" << endl;
return 0;
}
結果:
類似這種比較高精度的測試,我們可以使用在我們專案**中進行使用,可以計算出我們程式的耗時,可以進行優化;
高精度納秒計時器
ktimer.h windows graphics programming win32 gdi and directdraw?feng yuan publisher prentice hall ptr first edition december 01,2000 高精度納秒計時器,最後修改 2008...
RDTSC指令實現納秒級計時器
原文 x86 platform 從pentium開始,很多80x86微處理器都引入tsc,乙個用於時間戳計數器的64位的暫存器,它在每個時鐘訊號 clk,clk是微處理器中一條用於接收外部振盪器的時鐘訊號輸入引線 到來時加一。通過它可以計算cpu的主頻,比如 如果微處理器的主頻是1mhz的話,那麼t...
c 微秒級計時器
queryperformancecounter 這個函式返回高精確度效能計數器的值,它可以以微秒為單位計時.但是queryperformancecounter 確切的精確計時的最小單位是與系統有關的,所以,必須要查詢系統以得到queryperformancecounter 返回的嘀噠聲的頻率.que...