Une API pour créer un chrono - Programmation
Marsh Posté le 06-06-2001 à 16:46:41
en c, y'a un truc simpe c'est time qui retourne l'heure ecoulee en seconde depuis y'a longtemps.
tu fais un time avant et apres la boucle et tu as la duree en seconde de la boucle.
Mais le defaut c'est que la precision n'est pas géniale, une seconde !!!
Marsh Posté le 06-06-2001 à 16:53:04
Bien essayé mais on ne se débarrassera pas de moi comme ca!
en effet, j'ai besoin de chronométrer une boucle d'environ une trentaine de millisecondes et ceci précisement.
Marsh Posté le 06-06-2001 à 16:57:02
dans le doute:
ca va si tu la met dans une boucle de 1 à 1000... et tu divise par 1000 le temps obtenu.
Le temps sera un peu plus long, mais pas trop si ta boucle a mesurer est assez lourde.
@suivre
Marsh Posté le 06-06-2001 à 17:01:01
y'a GetTickCount qui te renvoit le nombre de milliseondes écoulées depuis le démarrage de windows.
temps1 = GetTickCount(); /* à vérifier, je dis ca depuis VB */
...
temps2 = GetTickCount();
temps écoulé : temps2 - temps 1 ...
mais bon ... windows étant multitache, il ne peut te garantir une précision supérieure à la milliseconde ...
et aussi de maniere un peu variable (sans rien changer tu peux trouver des temps variables)
tu peux essayer de modifier la priorite => plus elevee possible pour ne pas etre gene par les autres programmes ...
Marsh Posté le 06-06-2001 à 17:03:44
Celà me semble difficile du fait que l'horloge du PC est basée sur un composant qui déclenche une interruption tous les 1/18,6° de seconde.
Si tu peux faire calculer ta boucle 100 fois, tu augmenteras la précision de la mesure.
Utile bien sur, uniquement pour optimiser du code !!!
Marsh Posté le 06-06-2001 à 17:16:17
je crois qu'il existe des trucs plus précis voir là :
http://msdn.microsoft.com/library/ [...] e_8wz8.htm
Marsh Posté le 06-06-2001 à 17:18:02
JPA> si la boucle est compliquée et qu'il faut l'inclure dans une autre boucle, il faut faire attention au cycle utilisé par la ggrande boucle, et vérifié que c'est insignifiant
Marsh Posté le 06-06-2001 à 17:27:25
y'a un truc sous windows qui est un high-precision timer, qui, si je souviens, tourne aux alentours de 2MHz, et je m'en sers pour afficher le frame-rate, donc 30msec, c'est parfait.
Je ne suis pas chez moi, donc je n'ai pas accès à mes sources, mais c'est sûr que ça existe.
Je ne suis pas sûr mais il avait peut être le terme performance dedans. En tout cas c'est vachement pratique pour timer les trucs rapides.
Si tu trouves vraiment pas, je pourrai y avoir accès dans qqes jours.
Marsh Posté le 06-06-2001 à 17:35:42
"Celà me semble difficile du fait que l'horloge du PC est basée sur un composant qui déclenche une interruption tous les 1/18,6° de seconde"
ha le DOS ... cette IT est librement configurable ... si je me souviens bien, l'IT est declanchee qd le compteur interne atteint 65536 (=> remise à zero)... soit 65536 * 18.6 = 1 218 969 et qq ... soit + de 1.2 MHz ...
m'enfin bref on s'en fout.
tout ca pour dire que s'il veut de la tres grande precision, faut qu'il recherche du cote de sources qui recherchent la fréquence du CPU ... y'a eu un post pas tres longtemps, je m'en vais le trouver de ce pas !!!
Marsh Posté le 06-06-2001 à 17:44:14
voila :
http://forum.hardware.fr/sqlforum/ [...] e=0&cache=
on y parle de QueryPerformanceCounter et de SetThreadPriority
Marsh Posté le 06-06-2001 à 16:28:01
je démarre le chrono
je lance la boucle à tester
elle se termine
je regarde le chrono et
HOP, j'ai le temps
qqn sait faire ca?