Voir la version complète : [unix] chopper le temps en millisecondes
Flamaros
18/09/2005, 16h38
Voila je fais une application ou je dois evaluer le temps qui s'ecoule pour la realisation de diverses operations. Pour le moment j'utilise gettimeofday pour avoir le temps d'execution en micro secondes, puis j'applique une convertion pour l'avoir en millisecondes, Seulement la capacite des int n'est pas assez grande et j'ai des valeurs qui sont errone (depassement de la capacite de l'int) car je fais la difference entre l'heure de depart et celle apres le resultat des calculs. (je peux par exemple obtenir des valeurs negatives)
Donc si une personne connait le moyen de mesure le temps en millisecondes directement au sein d'un programme. C'est pour evaluer les performances de differents algorythmes.
Tu peux utiliser un "long int" codé sur quatre octets, au lieu d'un "int" ?
Tu peux peut-être les utiliser, le temps de trouver autre chose...
a+
Flamaros
18/09/2005, 22h16
Bien vu mais ca aurait ete trop facile, je suis souvent confronte a ce genre de pb et dans tout les cas jusqu'a present il me suffisait d'augmenter la capacite de la variable.
Cette fois je ne peux pas car la fonction remplis une structure avec des int alors impossible de faire autrement (sans doute qu'en interne elle utilise des int).
Mais merci quand meme.
Flamaros
19/09/2005, 00h09
Bon meme si maintenant c'est trop tard (heure de rendu du projet depassee), je souhaite toujours savoir si quelqu'un a la solution.
deathangel
19/09/2005, 07h34
t'as essayé la fonction GetTickCount() qui te renvoie un long représentant le nombre de millisecondes écoulées entre le 1er janvier 1979 et l'heure actuelle ?
Mais je crois qu'elle n'existe que sous Windows....
Flamaros
20/09/2005, 16h01
J'ai fini par trouver la solution, elle etait dans le man, je ne l'avais pas lu en entier.
Deja dans la structure c'est bien des long, mais c'etait pas vraiment la qu'etait mon erreur. Les micro secondes bouclent jusqu'a atteindre une secondes, donc quand 1 000 000 de micro secondes se sont ecoule le compteur passe a 0 mais 1 secondes est ajoutee. En convertissant les secondes et les micro-secondes en milli-secondes et en additionnant le tout j'obtiens le bon resultat.
Normalement c'est portable vu que ca fait partie de la lib standart.
Lightness1024!
17/10/2005, 18h45
justement les problemes de timers de précision c'est bien ce qui n'est pas portable :/
sinon ya SDL_GetTick()
Je vois ce dont tu parles...
A mon avis Flamaros a utilisé un gettimeofday() qui est *à peu près* portable.
En effet selon les archi il renvoit un long (ou là les problèmes de débordement se posent) ou bien un struct timeval qui est composé des deux champs qu'il a explicité.
Dans ce cas précis, viens plutôt sur le chan, ça te fera qqs chances en plus d'avoir ta réponse
Flamaros
18/10/2005, 11h25
La SDL c'est bien mais il ne faut pas oublier que parfois elle utilise des trucs qui sont portables (ou quasiment), uniquement car c'est en rapport avec le reste. A mon avis meme pour ce qui n'est pas portable, la SDL doit utiliser des fonctions relativement proche pour que ca reste leget et rapide (moins de code specifique).
La seule difference selon les os c'est que la strcture timeval peux contenir soit directement deux long ou des typedef sur le type long (y a une diffenrce la?).
PS : je pense que quasiment la totalite des lib standard doivent etre porte correctement sous win.
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org