首頁 >後端開發 >C++ >C語言中QueryPerformanceCounter如何實現精確的時間測量?

C語言中QueryPerformanceCounter如何實現精確的時間測量?

Linda Hamilton
Linda Hamilton原創
2024-12-26 00:24:08153瀏覽

How Can QueryPerformanceCounter Achieve Accurate Time Measurement in C  ?

實作QueryPerformanceCounter 以精確的時間測量

QueryPerformanceCounter 是Microsoft Windows 提供的一個高精度函數,用於測量以微秒為單位的時間間隔。為了在 C 中有效地實現它,讓我們一步步剖析它的用法。

首先,您需要包含必要的頭檔:

#include <windows.h>

接下來,宣告兩個全域變數來儲存效能計數器頻率和起點:

double PCFreq = 0.0;
__int64 CounterStart = 0;

StartCounter()函數初始化效能計數器:

void StartCounter()
{
    LARGE_INTEGER li;
    if(!QueryPerformanceFrequency(&amp;li))
        cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart)/1000.0;

    QueryPerformanceCounter(&amp;li);
    CounterStart = li.QuadPart;
}

QueryPerformanceFrequency檢索計數器的頻率,QueryPerformanceCounter 記錄目前值。

要測量自呼叫StartCounter 以來經過的時間,請使用GetCounter() 函數:

double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&amp;li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}

該函數透過將目前計數器值與起始計數器值進行比較來計算經過的時間值,調整計數器的頻率。

用法範例:

StartCounter();
Sleep(1000);
cout << GetCounter() <<"\n";

此程式應輸出接近 1000 的數字,並展示計數器測量微秒持續時間的準確性。

可以透過修改PCFreq來自訂計數器的精確度計算:

  • 秒:PCFreq = double(li.QuadPart);
  • 微秒:PCFreq = double(li.QuadPart)/1000000.0;

選擇取決於您所需的粒度等級。

以上是C語言中QueryPerformanceCounter如何實現精確的時間測量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn