在windows下能夠經過QueryPerformanceFrequency()和QueryPerformanceCounter()等系列函數來實現計時器的功能。ios
根據其函數說明,其精度可以達到微秒級,可是須要硬件中的計時器來支持。至於具體怎麼樣的硬件可以支持,查了不少資料都沒有詳細說明;而另一些資料也說明,若是底層硬件不支持,這兩個API就會返回相似於GetTickCount()的精度結果。通常狀況下能夠放心的使用。windows
這裏就把本身一直用的計時器分享一下,已經簡單將其封裝成類的形式,你們能夠將其加入到經常使用的工具組件裏面,方便使用:函數
#include<iostream> #include<Windows.h> using namespace std; class CTimer { public: CTimer(void); ~CTimer(void); int time_in(); double time_out(); private: LARGE_INTEGER litmp; LONGLONG qt1, qt2; double dft, dff, dfm; }; CTimer::CTimer(void) { } CTimer::~CTimer(void) { } int CTimer::time_in() { QueryPerformanceFrequency(&litmp);//得到時鐘頻率 dff = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp);//得到初始值 qt1 = litmp.QuadPart; return 1; } double CTimer::time_out() { QueryPerformanceCounter(&litmp);//得到終止值 qt2 = litmp.QuadPart; dfm = (double)(qt2 - qt1); dft = dfm / dff;//得到對應的時間值 return dft; } int main() { CTimer timer; timer.time_in(); for (size_t i = 0; i < 10000; i++) { const size_t num = 200 * 1024; char *tmp = new char[num]; memset(tmp, 0, num); delete[] tmp; tmp = nullptr; } cout<<"申請堆耗時:"<<timer.time_out()<<endl; timer.time_in(); for (size_t i = 0; i < 10000; i++) { const size_t num = 200 * 1024; char tmp[num]; memset(tmp, 0, num); } cout << "申請棧耗時:" << timer.time_out() << endl; return 0; }
這裏的例子分別計算了申請堆和申請棧的時間,其運行結果以下:
工具