Percanggahan Resolusi dalam std::chrono::high_resolution_clock
Dalam program ujian yang direka untuk mengukur masa yang diambil oleh std::cout, output mendedahkan sisihan tinggi secara konsisten daripada jangkaan 100 nanosaat resolusi std::chrono::high_resolution_clock. Sebaliknya, tempoh yang diukur adalah antara 1 hingga 2 mikrosaat. Percanggahan ini menimbulkan persoalan tentang resolusi yang dilaporkan dan ketepatan kaedah pengukuran masa.
Faktor yang Mempengaruhi Resolusi
Leraian jam, seperti yang dilaporkan oleh tempohnya, ialah unit masa terkecil yang boleh diukur. Walaupun Visual Studio 2012 menyertakan jam resolusi tinggi, malangnya ia kurang ketepatan, biasanya mempamerkan resolusi sekitar 1 milisaat. Ini disebabkan oleh fakta bahawa Visual Studio 2012 mentakrifkan semula high_resolution_clock kepada system_clock, yang sememangnya mempunyai ketepatan yang lebih rendah.
Alternatif Jam Resolusi Tinggi untuk Visual Studio 2012
Untuk menangani had ini, jam resolusi tinggi yang lebih tepat boleh dilaksanakan menggunakan fungsi QueryPerformanceCounter yang disediakan oleh sistem pengendalian. Kelas HighResClock yang disediakan di bawah menangani isu ini dengan menggunakan QueryPerformanceCounter untuk menawarkan jam yang boleh dipercayai dengan ketepatan tahap mikrosaat:
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; }(); }
Jam alternatif ini boleh disepadukan dengan lancar ke dalam kod sedia ada, membenarkan pengukuran masa resolusi tinggi walaupun dalam kekangan Visual Studio 2012.
Atas ialah kandungan terperinci Mengapakah std::chrono::high_resolution_clock Melaporkan Resolusi Lebih Rendah Daripada Jangkaan dalam Visual Studio 2012?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!