Soalan:
Dalam program ujian yang diberikan, std::chrono::high_resolution_clock melaporkan resolusi 100 nanosaat, tetapi masa yang diukur yang diambil oleh std::cout secara konsisten melebihi 1 mikrosaat. Mengapakah resolusi yang dijangkakan tidak sepadan dengan ukuran yang diperhatikan?
Jawapan:
Jika Visual Studio 2012 sedang digunakan, std::chrono::high_resolution_clock ialah typedef' d ke system_clock, yang mempunyai resolusi terhad kira-kira 1 milisaat. Percanggahan inilah yang menyebabkan ketidakkonsistenan yang diperhatikan.
Penyelesaian:
Untuk mendapatkan pemasaan resolusi tinggi dalam Visual Studio 2012, jam alternatif yang menggunakan QueryPerformanceCounter harus digunakan. Kod berikut memberikan contoh:
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 ini boleh digunakan secara bergantian dengan jam standard, memberikan pemasaan resolusi tinggi yang diperlukan kefungsian.
Atas ialah kandungan terperinci Mengapakah std::chrono::high_resolution_clock dalam Visual Studio 2012 melaporkan resolusi yang lebih tinggi daripada ukuran yang diperhatikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!