Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah QueryPerformanceCounter Boleh Mencapai Pengukuran Masa Tepat dalam C?

Bagaimanakah QueryPerformanceCounter Boleh Mencapai Pengukuran Masa Tepat dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-12-26 00:24:08153semak imbas

How Can QueryPerformanceCounter Achieve Accurate Time Measurement in C  ?

Melaksanakan QueryPerformanceCounter untuk Pengukuran Masa Tepat

QueryPerformanceCounter ialah fungsi yang sangat tepat yang disediakan oleh Microsoft Windows untuk mengukur selang masa dalam mikrosaat. Untuk melaksanakannya dengan berkesan dalam C , mari kita rungkai penggunaannya langkah demi langkah.

Pada mulanya, anda perlu memasukkan fail pengepala yang diperlukan:

#include <windows.h>

Seterusnya, isytiharkan dua pembolehubah global untuk menyimpan kekerapan pembilang prestasi dan titik permulaan:

double PCFreq = 0.0;
__int64 CounterStart = 0;

Fungsi StartCounter() memulakan prestasi pembilang:

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

    PCFreq = double(li.QuadPart)/1000.0;

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

QueryPerformanceFrequency mendapatkan semula kekerapan pembilang dan QueryPerformanceCounter merekodkan nilai semasa.

Untuk mengukur masa berlalu sejak StartCounter dipanggil, gunakan fungsi GetCounter():

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

Fungsi mengira masa berlalu dengan membandingkan pembilang semasa nilai kepada nilai permulaan, melaraskan untuk kekerapan pembilang.

Contoh Penggunaan:

StartCounter();
Sleep(1000);
cout << GetCounter() <<"\n";

Program ini harus mengeluarkan nombor hampir 1000, menunjukkan ketepatan pembilang untuk mengukur tempoh masa dalam mikrosaat.

Anda boleh menyesuaikan ketepatan kaunter dengan mengubah suai PCFreq pengiraan:

  • Saat: PCFreq = double(li.QuadPart);
  • Mikrosaat: PCFreq = double(li.QuadPart)/1000000.0;

Pilihan bergantung pada tahap butiran yang anda inginkan.

Atas ialah kandungan terperinci Bagaimanakah QueryPerformanceCounter Boleh Mencapai Pengukuran Masa Tepat dalam C?. 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