Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `std::chrono::high_resolution_clock` Menunjukkan Percanggahan Walaupun Resolusi Nanosaat?
std::chrono::high_resolution_clock Percanggahan Resolusi
Walaupun menetapkan resolusi nanosaat untuk std::chrono::high_resolution_clock, percanggahan timbul semasa mengukur selang masa. Ini boleh dilihat dalam program ujian yang disediakan di mana masa yang dilaporkan diambil oleh std::cout tidak tepat dalam julat resolusi yang dijangkakan.
Menyelesaikan Percanggahan
The punca percanggahan ini terletak pada pelaksanaan std::chrono::high_resolution_clock pada Visual Studio 2012. Di bawah ini persekitaran, high_resolution_clock ditakrifkan sebagai alias untuk system_clock, yang mempunyai resolusi sekitar 1 milisaat.
Fix for Visual Studio 2012
Untuk mendapatkan pemasa resolusi tinggi yang benar-benar tinggi pada Visual Studio 2012, pelaksanaan jam resolusi tinggi tersuai ialah disyorkan:
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)); }
Penggunaan Tersuai Jam
HighResClock tersuai boleh digunakan sebagai ganti std::chrono::high_resolution_clock dengan fungsi yang sama. Dengan menggunakan QueryPerformanceCounter secara langsung, ia menyediakan pemasaan resolusi tinggi yang tepat.
Atas ialah kandungan terperinci Mengapakah `std::chrono::high_resolution_clock` Menunjukkan Percanggahan Walaupun Resolusi Nanosaat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!