ホームページ  >  記事  >  バックエンド開発  >  Visual Studio 2012 の std::chrono::high_resolution_ Clock が観測された測定値よりも高い解像度を報告するのはなぜですか?

Visual Studio 2012 の std::chrono::high_resolution_ Clock が観測された測定値よりも高い解像度を報告するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-13 14:35:03441ブラウズ

Why does std::chrono::high_resolution_clock in Visual Studio 2012 report a higher resolution than observed measurements?

std::chrono::high_resolution_lock との測定精度が一致しない

質問:

指定されたテスト プログラムでは、 std::chrono::high_resolution_ Clock は、次の解像度を報告します。 100 ナノ秒ですが、std::cout にかかる測定時間は常に 1 マイクロ秒を超えています。予想される解像度が観測された測定値と一致しないのはなぜですか?

答え:

Visual Studio 2012 が使用されている場合、std::chrono::high_resolution_ Clock は typedef です。 d を system_lock に変換します。解像度は約 1 ミリ秒に制限されています。この不一致が、観察された不一致の原因です。

解決策:

Visual Studio 2012 で高解像度のタイミングを取得するには、QueryPerformanceCounter を利用する代替クロックを使用する必要があります。次のコードは例を示しています。

HighResClock.h:

struct HighResClock
{
    typedef long long                              rep;
    typedef std::nano                              period;
    typedef std::chrono::duration<rep, period>     duration;
    typedef std::chrono::time_point<HighResClock>  time_point;
    static const bool is_steady = true;

    static time_point now();
};

HighResClock.cpp:

namespace
{
    const long long g_Frequency = []() -> long long
    {
        LARGE_INTEGER frequency;
        QueryPerformanceFrequency(&frequency);
        return frequency.QuadPart;
    }();
}

HighResClock::time_point HighResClock::now()
{
    LARGE_INTEGER count;
    QueryPerformanceCounter(&count);
    return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency));
}

この HighResClock は標準クロックと互換的に使用でき、必要な機能を提供します。高解像度のタイミング機能。

以上がVisual Studio 2012 の std::chrono::high_resolution_ Clock が観測された測定値よりも高い解像度を報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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