1. 程式人生 > >Windows API一日一練 68 QueryPerformanceCounter函數

Windows API一日一練 68 QueryPerformanceCounter函數

bool spa ews void ron output net counter size

分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

精確的時間計時,有時候是非常必要的。比如播放多媒體時視頻與音頻的時間同步,還有在測試代碼的性能時,也需要使用到非常精確的時間計時。還有測試硬件的性能時,也需要精確的時間計時。這時就需要使用QueryPerformanceCounter來查詢定時器的計數值,如果硬件裏有定時器,它就會啟動這個定時器,並且不斷獲取定時器的值,這樣的定時器精度,就跟硬件時鐘的晶振一樣精確的。 函數QueryPerformanceCounter
QueryPerformanceFrequency聲明如下: WINBASEAPI BOOL WINAPI QueryPerformanceCounter( __out LARGE_INTEGER *lpPerformanceCount ); WINBASEAPI BOOL WINAPI QueryPerformanceFrequency( __out LARGE_INTEGER *lpFrequency ); lpPerformanceCount是返回定時器當前計數值。 QueryPerformanceFrequency
是返回定時器的頻率。 調用函數的例子如下: #001 //精確時鐘查詢。 #002 //蔡軍生 2007/11/08 QQ:9073204 深圳 #003 void TestHighTimer(void) #004 { #005 // #006 LARGE_INTEGER nFreq; #007 LARGE_INTEGER nLastTime1; #008 LARGE_INTEGER nLastTime2; #009 #010 //獲取是否支持精確定時器。 #011 if (QueryPerformanceFrequency(&nFreq))
#012 { #013 // #014 const int nBufSize = 256; #015 TCHAR chBuf[nBufSize]; #016 #017 //顯示定時器的頻率。 #018 wsprintf(chBuf,_T("LastTime=%I64d/r/n"),nFreq); #019 OutputDebugString(chBuf); #020 #021 //獲取定時器的值。 #022 QueryPerformanceCounter(&nLastTime1); #023 wsprintf(chBuf,_T("LastTime=%I64d/r/n"),nLastTime1); #024 OutputDebugString(chBuf); #025 #026 Sleep(0); #027 #028 //獲取定時器的值。 #029 QueryPerformanceCounter(&nLastTime2); #030 wsprintf(chBuf,_T("LastTime=%I64d/r/n"),nLastTime2); #031 OutputDebugString(chBuf); #032 #033 #034 //計算時間是花費多少秒。 #035 float fInterval = nLastTime2.QuadPart - nLastTime1.QuadPart; #036 swprintf(chBuf,nBufSize,_T("花費:%f/r/n"),fInterval/(float)nFreq.QuadPart); #037 OutputDebugString(chBuf); #038 } #039 #040 }

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!http://www.captainbed.net

Windows API一日一練 68 QueryPerformanceCounter函數