ホームページ > バックエンド開発 > C++ > ナノ秒の解像度にもかかわらず、「std::chrono::high_resolution_ Clock」に不一致が表示されるのはなぜですか?

ナノ秒の解像度にもかかわらず、「std::chrono::high_resolution_ Clock」に不一致が表示されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-09 19:08:02
オリジナル
356 人が閲覧しました

Why Does `std::chrono::high_resolution_clock` Show Discrepancies Despite Nanosecond Resolution?

std::chrono::high_resolution_ Clock 解像度の不一致

std::chrono::high_resolution_ Clock にナノ秒の解像度を指定しているにもかかわらず、不一致が発生します時間間隔を測定するとき。これは、提供されたテスト プログラムで確認できます。std::cout によって報告された時間が、正確に予想される解像度の範囲内ではありません。

不一致の解決

この不一致の原因は、Visual Studio 2012 での std::chrono::high_resolution_ Clock の実装にあります。この環境では、high_resolution_ Clock は、約 1 ミリ秒の解像度を持つ system_ Clock のエイリアスとして定義されます。

Visual Studio 2012 の修正

Visual Studio 2012 で真に高解像度のタイマーを取得するには、カスタムの高解像度クロック実装をお勧めします:

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 は次のことができます。同じ機能を持つ std::chrono::high_resolution_ Clock の代わりに使用できます。 QueryPerformanceCounter を直接利用することで、正確な高解像度のタイミングを提供します。

以上がナノ秒の解像度にもかかわらず、「std::chrono::high_resolution_ Clock」に不一致が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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