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
Lepaskan: 2024-12-26 00:24:08
asal
158 orang telah melayarinya

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

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

double PCFreq = 0.0;
__int64 CounterStart = 0;
Salin selepas log masuk

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

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

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

Contoh Penggunaan:

StartCounter();
Sleep(1000);
cout << GetCounter() <<"\n";
Salin selepas log masuk

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!

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