Maison > développement back-end > C++ > Comment puis-je mesurer avec précision le temps écoulé à l'aide de QueryPerformanceCounter sous Windows ?

Comment puis-je mesurer avec précision le temps écoulé à l'aide de QueryPerformanceCounter sous Windows ?

Linda Hamilton
Libérer: 2024-12-14 18:03:12
original
542 Les gens l'ont consulté

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

Comment déterminer le temps écoulé avec QueryPerformanceCounter

QueryPerformanceCounter est une API de compteur de performances haute résolution pour les systèmes Windows qui permet des mesures de synchronisation précises. Pour le mettre en œuvre, suivez ces étapes :

  1. Inclure les en-têtes nécessaires :

    #include <windows.h>
    Copier après la connexion
  2. Définir les performances Variables du compteur :

    • PCFreq : Double variable pour stocker le fréquence du compteur en millisecondes.
    • CounterStart : variable entière pour stocker la valeur du compteur de départ.
  3. Implémenter la fonction StartCounter :

    • Obtenez la fréquence du compteur de performance en hertz en utilisant QueryPerformanceFrequency.
    • Convertissez la fréquence en millisecondes.
    • Obtenez la valeur du compteur de départ à l'aide de QueryPerformanceCounter.
  4. Implémentez la fonction GetCounter :

    • Obtenir la valeur actuelle du compteur à l'aide de QueryPerformanceCounter.
    • Soustrayez la valeur du compteur de départ pour obtenir le temps écoulé en millisecondes.
    • Convertissez le temps écoulé dans l'unité souhaitée (par exemple, secondes, microsecondes).
  5. Exemple Utilisation :

    • Appelez StartCounter() pour initialiser le compteur de performances.
    • Utilisez Sleep ou une fonction similaire pour attendre une durée spécifique.
    • Appelez GetCounter() pour récupérer le temps écoulé.

Code Extrait :

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

Cet extrait de code génère une valeur proche de 1 000, démontrant l'utilisation de QueryPerformanceCounter pour des mesures de synchronisation précises.

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