Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengukur Masa Berlalu Dengan Tepat Menggunakan QueryPerformanceCounter dalam Windows?

Bagaimanakah Saya Boleh Mengukur Masa Berlalu Dengan Tepat Menggunakan QueryPerformanceCounter dalam Windows?

Linda Hamilton
Lepaskan: 2024-12-14 18:03:12
asal
545 orang telah melayarinya

How Can I Accurately Measure Elapsed Time Using QueryPerformanceCounter in Windows?

Cara Menentukan Masa Berlalu dengan QueryPerformanceCounter

QueryPerformanceCounter ialah API pembilang prestasi resolusi tinggi untuk sistem Windows yang membolehkan pengukuran masa yang tepat. Untuk melaksanakannya, ikuti langkah berikut:

  1. Sertakan Pengepala yang Diperlukan:

    #include <windows.h>
    Salin selepas log masuk
  2. Tentukan Prestasi Pembolehubah Kaunter:

    • PCFreq: Berganda pembolehubah untuk menyimpan kekerapan pembilang dalam milisaat.
    • CounterStart: Pembolehubah integer untuk menyimpan nilai pembilang permulaan.
  3. Laksanakan Fungsi StartCounter:

    • Dapatkan kekerapan pembilang prestasi dalam hertz menggunakan QueryPerformanceFrequency.
    • Tukar kekerapan kepada milisaat.
    • Dapatkan nilai pembilang permulaan menggunakan QueryPerformanceCounter.
  4. Laksanakan GetCounter Fungsi:

    • Dapatkan nilai pembilang semasa menggunakan QueryPerformanceCounter.
    • Tolak nilai pembilang permulaan untuk mendapatkan masa yang berlalu dalam milisaat.
    • Tukarkan yang telah berlalu masa ke unit yang dikehendaki (cth., saat, mikrosaat).
  5. Contoh Penggunaan:

    • Panggil StartCounter() untuk memulakan pembilang prestasi.
    • Gunakan Tidur atau fungsi yang serupa untuk menunggu tempoh tertentu.
    • Panggil GetCounter() untuk mendapatkan masa yang telah berlalu.

Coretan Kod:

double PCFreq = 0.0;
__int64 CounterStart = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    if (!QueryPerformanceFrequency(&li))
        cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart) / 1000.0;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}

double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart - CounterStart) / PCFreq;
}

int main()
{
    StartCounter();
    Sleep(1000);
    cout << GetCounter() << "\n";
    return 0;
}
Salin selepas log masuk

Coretan kod ini mengeluarkan nilai yang hampir dengan 1000, menunjukkan penggunaan QueryPerformanceCounter untuk pemasaan yang tepat ukuran.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengukur Masa Berlalu Dengan Tepat Menggunakan QueryPerformanceCounter dalam Windows?. 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