Approuvé : Fortect
Le dernier jour, certains de nos lecteurs ont rencontré l’erreur du compteur hautes performances Win32. Plusieurs facteurs peuvent motiver ce problème. Nous parlerons de ce conseil ci-dessous.
- 2 minutes pour lire.
Obtient la valeur actuelle entière du compteur de performances, ce qui apporte le temps de réponse long (<1 s) auquel ce tampon peut être utilisé pour la longueur et la largeur de synchronisation.
Syntaxe
Approuvé : Fortect
Fortect est l'outil de réparation de PC le plus populaire et le plus efficace au monde. Des millions de personnes lui font confiance pour assurer le fonctionnement rapide, fluide et sans erreur de leurs systèmes. Avec son interface utilisateur simple et son puissant moteur d'analyse, Fortect détecte et corrige rapidement un large éventail de problèmes Windows, de l'instabilité du système et des problèmes de sécurité à la gestion de la mémoire et aux goulots d'étranglement des performances.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Paramètres
Un pointeur vers une variable obtient cette valeur actuelle d’approche à partir d’un compteur de performance numérique.
Valeur renvoyée
Si la plupart des fonctions ne fonctionnent pas, la valeur de retour a toujours été de 0%. Pour obtenir plus d’informations sur la génération de cette erreur, GetLastError . Sur les systèmes exécutant Windows XP ou plus récent, la fonction réussira toujours et par conséquent ne retournera probablement jamais zéro.
Pour plus d’informations sur cette fonctionnalité exceptionnelle et sur son utilisation, consultez la section Enregistrement d’horodatages de haute qualité .
Exemples
// Récupère le nombre actuel de ticks à partir de QueryPerformanceCounter.Throws. une façon// Différence si l'appel à QueryPerformanceCounter échoue.statique e intégré int64_t GetTicks () LARGE_INTEGER fonctionne ; if (! QueryPerformanceCounter (& Tiques)) winrt :: throw_last_error (); Les tiques retournent.QuadPart;
Exigences
Au moins un client professionnel majeur amélioré | Windows 2000 [le bureau utilise | Applications UWP] |
Serveur minimum pris en charge | Windows 2000 Server [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
Titre | profileapi.h (y compris Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
Pas la réponse spécifique que vous recherchez ? Parcourez les questions restantes signalées par les minuteurs Windows C ++ et posez votre propre question.
#include double PCFreq implique 0,0 ;__int64 CounterStart = 0 ;void StartCounter () LARGE_INTEGER li; et si (! QueryPerformanceFrequency (& li)) coûts << a échoué! notT "; "Fréquence d'exécution des requêtes PCFreq = double (li.QuadPart) / 1000,0 ; QueryPerformanceCounter (& li); CounterStart est identique à li.QuadPart ;double GetCounter () Lee ; large_integer QueryPerformanceCounter (& li); deux retours (li.QuadPart-CounterStart) / PCFreq ;int main () StartCounter (); Sommeil (1000); coût << << " n" ; getcounter() renvoie 0 ;
Ce programme doit toujours renvoyer un nombre proche de 1000 (l'hibernation de Windows ne produit pas encore fini, mais devrait exister 999).
Le travail StartCounter ()
souscrit le nombre de ticks que ce service a dans l'aspect CounterStart
. La fonction GetCounter()
retourne le nombre associé en quelques millisecondes seulement depuis le dernier appel à startcounter()
sous forme de double, c'est à dire évidemment si GetCounter()
a la priorité à 0,001, pour cette raison le temps pour StartCounter ()
sera d'environ 1 microseconde.
a été appelé
Si les utilisateurs souhaitent que le minuteur utilise des secondes, modifiez-le en particulier
PCFreq = double (gauche QuadPart) /1000.0 ;
PCFreq = double (gauche QuadPart);
PCFreq signifie double (li.QuadPart) /1000000.0 ;
587
répondu le 14 novembre de l'année dernière à 23h25.
2.248 33 badges d'or 1717 badges d'argent 1616 badges de bronze
/ ** Utiliser l'horloge à l'initialisation * /#define TIMER_INIT n LARGE_INTEGER fréquence ; n LARGE_INTEGER t1, t2 ; n accepté deux fois; n QueryPerformanceFrequency (& fréquence) ;/ ** Utilisez pour démarrer une minuterie de performance 3 . /#define TIMER_START QueryPerformanceCounter (& t1) ;/ ** Utilisez ce paramètre pour arrêter une minute de performance et afficher le résultat sur un flux donné. Moins verbeux que c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Compteur de performances de requête (& t2) ; n elapsedTime = (float) (t2.QuadPart-t1.QuadPart) /fréquence.QuadPart ; n std :: wcout << elapsedTime << L "sec" << endl;
TIMER_INIT TIMER_START Sommeil (1000); TIMER_STOP TIMER_START Sommeil (1234) ; TIMER_STOP
un seul 0,00003 sec.1.23407 a.
933 88 badges argentés badges marron 2020
répondu le 10 avril 2013 à 13:04
En supposant que vous soyez directement sous Windows (donc si vous devez marquer notre question de cette façon !), vous pouvez trouver un programme C ++ HRTimer
pas très difficile et pratique à partir du code source sur ce Page Facebook MSDN. qui prend en charge les appels d'ensemble nécessaires pour faire quelque chose de très proche de vos besoins (il va être pratique d'ajouter la méthode GetTicks ()
au problème, en particulier pour offrir exactement ce que vous devez vraiment faire ).
Sur les plates-formes non Windows, il n'y a pas d'intention QueryPerformanceCounter, donc la solution n'est pas directement pratique. Cependant, si vous le ré-encapsulez dans une classe qui inclut It hrtimer
mentionné ci-dessus, il sera certainement plus facile de changer l'implémentation de vous voyez, la classe pour profiter des plates-formes actuelles, sans aucun doute , capable (peut-être grâce à une amélioration ou autre chose !).
résolu le 15 novembre 09 à 23h28
775k
J'ajouterais certainement un exemple de pilote NDIS qui fera gagner du temps sur cette question. Comme cela est généralement bien connu, KeQuerySystemTime (simulé dans NdisGetCurrentSystemTime) a une résolution spécifique bien inférieure à la milliseconde, et éventuellement certains réseaux de produits, tels que les paquets ou les futurs IRP, peuvent peut-être nécessiter un horodatage plus satisfaisant ;
LONG_INTEGER données, fréquence ;LANGLON Diff;data = KeQueryPerformanceCounter ((LARGE_INTEGER *) & fréquence)diff implique data.QuadPart / (Frequency.QuadPart / diviseur usd)
répondu le 21 janvier douze mois à 14:12
2 686 66 badges dorés 4040 badges magiques
Accélérez les performances de votre ordinateur dès maintenant avec ce simple téléchargement.