Mengapakah std::chrono::high_resolution_clock Melaporkan Resolusi Lebih Rendah Daripada Jangkaan dalam Visual Studio 2012?

Linda Hamilton
Lepaskan: 2024-11-11 09:13:02
asal
470 orang telah melayarinya

Why Does std::chrono::high_resolution_clock Report Lower Resolution Than Expected in Visual Studio 2012?

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(&amp;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(&amp;frequency);
        return frequency.QuadPart;
    }();
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan