Rumah > pembangunan bahagian belakang > C++ > Mengapakah `std::chrono::high_resolution_clock` Menunjukkan Percanggahan Walaupun Resolusi Nanosaat?

Mengapakah `std::chrono::high_resolution_clock` Menunjukkan Percanggahan Walaupun Resolusi Nanosaat?

Mary-Kate Olsen
Lepaskan: 2024-11-09 19:08:02
asal
391 orang telah melayarinya

Why Does `std::chrono::high_resolution_clock` Show Discrepancies Despite Nanosecond Resolution?

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();
};
Salin selepas log masuk

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));
}
Salin selepas log masuk

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!

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