>  기사  >  백엔드 개발  >  `std::chrono::high_solution_clock`이 나노초 해상도에도 불구하고 불일치를 표시하는 이유는 무엇입니까?

`std::chrono::high_solution_clock`이 나노초 해상도에도 불구하고 불일치를 표시하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 19:08:02285검색

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

std::chrono::high_solution_clock 해상도 불일치

std::chrono::high_solution_clock에 나노초 해상도를 지정했음에도 불구하고 불일치가 발생합니다. 시간 간격을 측정할 때 이는 제공된 테스트 프로그램에서 std::cout에 의해 보고된 시간이 예상 해상도 범위를 정확하게 벗어나는 것을 볼 수 있습니다.

불일치 해결

이러한 불일치의 원인은 Visual Studio 2012의 std::chrono::high_solution_clock 구현에 있습니다. 이 환경에서 high_solution_clock은 약 1밀리초의 해상도를 갖는 system_clock의 별칭으로 정의됩니다.

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));
}

사용자 정의 사용 시계

동일한 기능으로 std::chrono::high_solution_clock 대신 사용자 정의 HighResClock을 사용할 수 있습니다. QueryPerformanceCounter를 직접 활용하여 정확한 고해상도 타이밍을 제공합니다.

위 내용은 `std::chrono::high_solution_clock`이 나노초 해상도에도 불구하고 불일치를 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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