ホームページ >バックエンド開発 >C++ >QueryPerformanceCounter はどのようにして C で正確な時間測定を実現できるのでしょうか?

QueryPerformanceCounter はどのようにして C で正確な時間測定を実現できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-26 00:24:08152ブラウズ

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() 関数はパフォーマンスを初期化します。 counter:

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;

選択は、希望する粒度レベルによって異なります。

以上がQueryPerformanceCounter はどのようにして C で正確な時間測定を実現できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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