Rumah >pembangunan bahagian belakang >C++ >Mengapakah std::chrono::high_resolution_clock dalam Visual Studio 2012 melaporkan resolusi yang lebih tinggi daripada ukuran yang diperhatikan?

Mengapakah std::chrono::high_resolution_clock dalam Visual Studio 2012 melaporkan resolusi yang lebih tinggi daripada ukuran yang diperhatikan?

Susan Sarandon
Susan Sarandonasal
2024-11-13 14:35:03446semak imbas

Why does std::chrono::high_resolution_clock in Visual Studio 2012 report a higher resolution than observed measurements?

Ketepatan Pengukuran Tidak Konsisten dengan std::chrono::high_resolution_clock

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!

Kenyataan:
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