>  기사  >  백엔드 개발  >  Visual Studio 2012의 std::chrono::high_solution_clock이 관찰된 측정값보다 더 높은 해상도를 보고하는 이유는 무엇입니까?

Visual Studio 2012의 std::chrono::high_solution_clock이 관찰된 측정값보다 더 높은 해상도를 보고하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-13 14:35:03395검색

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

std::chrono::high_solution_clock의 일관되지 않은 측정 정확도

질문:

주어진 테스트 프로그램에서 std::chrono::high_solution_clock은 100나노초의 해상도를 보고합니다. 그러나 std::cout에 의해 측정된 시간은 지속적으로 1마이크로초를 초과합니다. 예상 해상도가 관찰된 측정값과 일치하지 않는 이유는 무엇입니까?

답변:

Visual Studio 2012를 사용하는 경우 std::chrono::high_solution_clock은 typedef'입니다. d는 약 1밀리초의 제한된 해상도를 갖는 system_clock입니다. 이러한 불일치가 관찰된 불일치의 원인입니다.

해결 방법:

Visual Studio 2012에서 고해상도 타이밍을 얻으려면 QueryPerformanceCounter를 활용하는 대체 시계를 사용해야 합니다. 다음 코드는 예를 제공합니다.

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은 표준 시계와 상호 교환적으로 사용할 수 있으며 필요한 기능을 제공합니다. 고해상도 타이밍 기능.

위 내용은 Visual Studio 2012의 std::chrono::high_solution_clock이 관찰된 측정값보다 더 높은 해상도를 보고하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.