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

Susan Sarandon
リリース: 2024-11-13 14:35:03
オリジナル
392 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート