首頁 > 後端開發 > C++ > 主體

儘管奈秒分辨率,為什麼'std::chrono::high_resolution_clock”仍顯示差異?

Mary-Kate Olsen
發布: 2024-11-09 19:08:02
原創
263 人瀏覽過

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

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.cpp

自訂HighResClock 可以用來取代具有相同功能的std::chrono::high_resolution_clock 。透過直接利用 QueryPerformanceCounter,它可以提供準確的高解析度計時。

以上是儘管奈秒分辨率,為什麼'std::chrono::high_resolution_clock”仍顯示差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板