ホームページ >バックエンド開発 >C++ >Windows で QueryPerformanceCounter を使用して経過時間を正確に測定するにはどうすればよいですか?

Windows で QueryPerformanceCounter を使用して経過時間を正確に測定するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-14 18:03:12545ブラウズ

How Can I Accurately Measure Elapsed Time Using QueryPerformanceCounter in Windows?

QueryPerformanceCounter を使用して経過時間を確認する方法

QueryPerformanceCounter は、正確なタイミング測定を可能にする Windows システム用の高解像度パフォーマンス カウンター API です。これを実装するには、次の手順に従います。

  1. 必要なヘッダーを含める:

    #include <windows.h>
  2. パフォーマンスの定義カウンタ変数:

    • PCFreq: カウンタ周波数をミリ秒単位で保存する Double 変数。
    • CounterStart: 開始カウンタ値を保存する整数変数。
  3. 実装StartCounter 関数:

    • QueryPerformanceFrequency を使用してパフォーマンス カウンタ周波数をヘルツ単位で取得します。
    • 周波数をミリ秒に変換します。
    • 次を使用して開始カウンタ値を取得します。 QueryPerformanceCounter.
  4. GetCounter 関数の実装:

    • QueryPerformanceCounter.
    • を使用して現在のカウンター値を取得します。開始カウンタ値を減算して、ミリ秒単位の経過時間。
    • 経過時間を目的の単位 (秒、マイクロ秒など) に変換します。
  5. 使用例:

    • StartCounter() を呼び出して、パフォーマンス カウンターを初期化します。
    • スリープまたは同様の関数を使用して、特定の期間待機します。
    • GetCounter() を呼び出して、経過時間を取得します。

コードスニペット:

double PCFreq = 0.0;
__int64 CounterStart = 0;

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

    PCFreq = double(li.QuadPart) / 1000.0;

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

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

int main()
{
    StartCounter();
    Sleep(1000);
    cout << GetCounter() << "\n";
    return 0;
}

このコード スニペットは 1000 に近い値を出力し、正確なタイミング測定のための QueryPerformanceCounter の使用を示しています。

以上がWindows で QueryPerformanceCounter を使用して経過時間を正確に測定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。