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
Linda Hamiltonasal
2024-12-14 18:03:12551semak imbas

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>
  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;
}

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!

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