質問:
指定されたテスト プログラムでは、 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 サイトの他の関連記事を参照してください。