Plus précis que gettickcount

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 001 fois - Téléchargée 32 fois

Contenu du snippet

Petite fonction qui marche a peu près ke gettickcount mais avec une unité bien plus précise ke la milliseconde ! :)

Source / Exemple :


var Valeur : Int64;
QueryPerformanceCounter(Valeur);

La fonction renvoi dans Valeur.

A voir également

Ajouter un commentaire Commentaires
Messages postés
367
Date d'inscription
lundi 1 avril 2002
Statut
Membre
Dernière intervention
11 février 2010

Bien utile cette source .. et simple en plus ... 8/10
j'ai remarqué une chose ;
Ayant voulu vérifier les dires de msx j'ai créer un nouveau projet avec un bouton et un timer.

Le code du bouton :

QueryPerformanceFrequency(freq);
QueryPerformanceCounter(deb);
timer1.enabled := true; //plus précis d'actiover le timer ici

le code du timer (interval fixé a 1000 ms) :

QueryPerformanceCounter(fin);
Timer1.Enabled := false;
ShowMessage(FormatFloat('0.000000 ms', (fin-deb)/freq*1000));

J'ai cliqué plusieur fois sur le bouton et le temps que le timer m'affiche varie de 993 ms à 1007 ms en une belle courbe gaussienne ...
C'est normal qu'il puisse se planter de 7 ms (j'ai même été à 8 ms : 992 ms) ???
Messages postés
1
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
19 janvier 2004

je pense que C par rapport au cycle d 'horloge car pour avoir un nombre en ms il fo le diviser par la frequence calculé du CPU =

freq,deb,fin : int64;

QueryPerformanceFrequency(freq);
QueryPerformanceCounter(deb);
// data
QueryPerformanceCounter(fin);
FormatFloat('0.000000 ms', (fin-deb)/freq*1000);

on aura le chiffre exact en ms
Messages postés
52
Date d'inscription
vendredi 26 avril 2002
Statut
Membre
Dernière intervention
28 octobre 2003

avec une unité bien plus précise ke la milliseconde ==> quel unité? J'ai tenter de trouver, apparament c'est GetTickCount * 3579 Mais je suis pas sur!
Messages postés
329
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
8 décembre 2009
6
ouais, mais ca c pour les vieu 386,..; d'après ce ke l'on ma di :) normalement les processeur d'aujourd'hui ca marche :)
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Attention aux résultat inattendus ! cette fonction renvoie un booléen si elle a trouvé un compteur haute résolution :
"The QueryPerformanceCounter function retrieves the current value of the high-resolution performance counter, if one exists."
Il serait plus exact d'écrire :
if not QueryPerformanceCounter(Valeur) then
Valeur :=GetTickCount;

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.