질문:
주어진 테스트 프로그램에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!