>  기사  >  백엔드 개발  >  std::chrono::high_solution_clock이 Visual Studio 2012에서 예상보다 낮은 해상도를 보고하는 이유는 무엇입니까?

std::chrono::high_solution_clock이 Visual Studio 2012에서 예상보다 낮은 해상도를 보고하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-11 09:13:02454검색

Why Does std::chrono::high_resolution_clock Report Lower Resolution Than Expected in Visual Studio 2012?

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

std::cout에 걸리는 시간을 측정하도록 설계된 테스트 프로그램에서, 출력은 예상되는 100나노초 분해능에서 지속적으로 높은 편차를 나타냅니다. 표준::크로노::고해상도_시계. 대신 측정된 기간의 범위는 1~2마이크로초입니다. 이러한 불일치는 보고된 분해능과 시간 측정 방법의 정확성에 대한 의문을 제기합니다.

분해능에 영향을 미치는 요소

시계의 분해능은 주기별로 보고되며, 측정할 수 있는 가장 작은 시간 단위이다. Visual Studio 2012에는 고해상도 시계가 포함되어 있지만 불행히도 정밀도가 부족하여 일반적으로 약 1밀리초의 해상도를 나타냅니다. 이는 Visual Studio 2012가 고해상도_시계를 본질적으로 정밀도가 낮은 system_clock으로 재정의했기 때문입니다.

Visual Studio 2012용 대체 고해상도 시계

이러한 제한으로 인해 운영 체제에서 제공하는 QueryPerformanceCounter 기능을 사용하면 보다 정확한 고해상도 클럭을 구현할 수 있습니다. 시스템. 아래에 제공된 HighResClock 클래스는 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()
    {
        LARGE_INTEGER count;
        QueryPerformanceCounter(&amp;count);
        return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency));
    }
};

namespace
{
    const long long g_Frequency = []() -> long long
    {
        LARGE_INTEGER frequency;
        QueryPerformanceFrequency(&amp;frequency);
        return frequency.QuadPart;
    }();
}

이 대체 시계는 기존 코드에 원활하게 통합될 수 있으므로 내부에서도 고해상도 시간 측정이 가능합니다. Visual Studio 2012의 제약.

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

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