PLUS PRÉCIS QUE GETTICKCOUNT

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 23 mars 2002 à 15:09
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010 - 15 avril 2004 à 16:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11808-plus-precis-que-gettickcount

cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
15 avril 2004 à 16:49
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) ???
cs_msx Messages postés 1 Date d'inscription samedi 8 mars 2003 Statut Membre Dernière intervention 19 janvier 2004
19 janv. 2004 à 13:44
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
balgrim Messages postés 52 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 28 octobre 2003
2 août 2003 à 14:41
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!
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
23 mars 2002 à 20:59
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 :)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 mars 2002 à 15:09
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;
Rejoignez-nous