首頁  >  文章  >  後端開發  >  為什麼 Visual Studio 2012 中的 std::chrono::high_resolution_clock 報告的解析度比觀察到的測量值更高?

為什麼 Visual Studio 2012 中的 std::chrono::high_resolution_clock 報告的解析度比觀察到的測量值更高?

Susan Sarandon
Susan Sarandon原創
2024-11-13 14:35:03442瀏覽

Why does std::chrono::high_resolution_clock in Visual Studio 2012 report a higher resolution than observed measurements?

與std::chrono::high_treatment_clock

測量精度不一致

問題:

在給定的測試程序中, std::chrono::high_resolution_clock 報告的分辨率為100 奈秒,但測量的std::cout 所花費的時間始終超過1 微秒。為什麼預期分辨率與觀察到的測量結果不匹配?

答案:

如果使用Visual Studio 2012,std::chrono::high_resolution_clock 為typedef' d 為system_clock,其解析度有限,約為1 毫秒。這種差異是導致觀察到的不一致的原因。

解決方案:

要在 Visual Studio 2012 中取得高解析度計時,應採用利用 QueryPerformanceCounter 的替代時脈。以下代碼提供了示例:

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.h:

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 可與標準時脈互換使用,提供必要的高解析度計時功能。

以上是為什麼 Visual Studio 2012 中的 std::chrono::high_resolution_clock 報告的解析度比觀察到的測量值更高?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn