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