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(&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(&frequency); return frequency.QuadPart; }(); }
이 대체 시계는 기존 코드에 원활하게 통합될 수 있으므로 내부에서도 고해상도 시간 측정이 가능합니다. Visual Studio 2012의 제약.
위 내용은 std::chrono::high_solution_clock이 Visual Studio 2012에서 예상보다 낮은 해상도를 보고하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!