QueryPerformanceFrequency 和 QueryPerformanceCounter用法


QueryPerformanceFrequency() - 基本介紹

類型:Win32API

原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

作用:返回硬件支持的高精度計數器的頻率。

返回值:非零,硬件支持高精度計數器;零,硬件不支持,讀取失敗。

QueryPerformanceFrequency() - 技術特點

供WIN9X使用的高精度定時器:QueryPerformanceFrequency()和QueryPerformanceCounter(),要求計算機從硬件上支持高精度定時器。

函數的原形是:
  BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
  BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);

數據類型LARGEINTEGER既可以是一個作為8字節長的整數,也可以是作為兩個4字節長的整數的聯合結構,其具體用法根據編譯器是否支持64位而定。該類型的定義如下:
  typeef union _ LARGE_INTEGER
  {
   struct
   {
   DWORD LowPart;
   LONG HighPart;
   };
   LONGLONG QuadPart;
  } LARGE_INTEGER;

在定時前應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鍾頻率。接着在需要嚴格計時的事件發生前和發生之后分別調用QueryPerformanceCounter(),利用兩次獲得的計數之差和時鍾頻率,就可以計算出事件經歷的精確時間。測試函數SLEEP(100)的精確持續時間方法:
  LARGE_INTEGER litmp;
  LONGLONG qt1,qt2;
  double dft,dff,dfm;
  QueryPerformanceFrequency(&litmp);//獲得時鍾頻率
  dff=(double)litmp.QuadPart;
  QueryPerformanceCounter(&litmp);//獲得初始值
  qt1=litmp.QuadPart;Sleep(100);
  QueryPerformanceCounter(&litmp);//獲得終止值
  qt2=litmp.QuadPart;
  dfm=(double)(qt2-qt1);
  dft=dfm/dff;//獲得對應的時間值

需要注意的是DFT計算的結果單位是秒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM