Maison > développement back-end > C++ > Comment QueryPerformanceCounter peut-il obtenir une mesure précise du temps en C ?

Comment QueryPerformanceCounter peut-il obtenir une mesure précise du temps en C ?

Linda Hamilton
Libérer: 2024-12-26 00:24:08
original
159 Les gens l'ont consulté

How Can QueryPerformanceCounter Achieve Accurate Time Measurement in C  ?

Implémentation de QueryPerformanceCounter pour une mesure précise du temps

QueryPerformanceCounter est une fonction très précise fournie par Microsoft Windows pour mesurer des intervalles de temps en microsecondes. Pour l'implémenter efficacement en C, disséquons son utilisation étape par étape.

Au départ, vous devez inclure le fichier d'en-tête nécessaire :

#include <windows.h>
Copier après la connexion

Ensuite, déclarez deux variables globales pour stocker le fréquence du compteur de performance et point de départ :

double PCFreq = 0.0;
__int64 CounterStart = 0;
Copier après la connexion

La fonction StartCounter() initialise la performance counter :

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;
}
Copier après la connexion

QueryPerformanceFrequency récupère la fréquence du compteur et QueryPerformanceCounter enregistre la valeur actuelle.

Pour mesurer le temps écoulé depuis l'appel de StartCounter, utilisez la fonction GetCounter() :

double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&amp;li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}
Copier après la connexion

La fonction calcule le temps écoulé en comparant la valeur actuelle du compteur à la valeur de départ, ajustement de la fréquence du compteur.

Exemple d'utilisation :

StartCounter();
Sleep(1000);
cout << GetCounter() <<"\n";
Copier après la connexion

Ce programme devrait générer un nombre proche de 1000, démontrant la précision du compteur pour mesurer des durées en microsecondes.

Vous pouvez personnaliser la précision du compteur en modifiant le PCFreq calcul :

  • Secondes : PCFreq = double(li.QuadPart);
  • Microsecondes : PCFreq = double(li.QuadPart)/1000000.0;

Le choix dépend du niveau de granularité souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal