std::chrono::high_resolution_clock 分辨率差異
儘管為std::chrono::high_resolution_clock 指定了奈秒分辨率,但還是會出現差異測量時間間隔時。這可以在提供的測試程序中看到,其中 std::cout 報告的時間並不完全在預期的分辨率範圍內。
解決差異
The造成這種差異的原因在於 Visual Studio 2012 上 std::chrono::high_resolution_clock 的實現。在此環境下,high_resolution_clock 被定義為 system_clock 的別名,其解析度約為 1 毫秒。
針對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中文網其他相關文章!