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中文网其他相关文章!