[Résolu] [C++] Mesure de temps en ms

Démarré par Arca, 23 Novembre 2013 à 00:43

0 Membres et 1 Invité sur ce sujet

23 Novembre 2013 à 00:43 Dernière édition: 23 Novembre 2013 à 01:11 par iArcadia
Bonsoir les solarussiens !

Voilà, je débute la programmation en C++ depuis le mois de septembre, et notre professeur a commencé à nous donner des micro-projets. Le premier est divisé en plusieurs étapes :
1 : une appli qui donne le pourcentage de bonnes réponses sur une série de 30 multiplications
2 : la même appli + on redemande le même calcul tant que l'utilisateur rentre une mauvaise réponse
3 : une appli qui affiche le temps mit en ms pour effectuer chaque combinaison de multiplication (de 0*0, 0*1... à 9*10,10*10)

Les deux premières étapes ne m'ont pas spécialement posé de problèmes, mais la dernière est un peu plus chiante : impossible de trouver un moyen relativement simple pour nos connaissances actuelles de faire une mesure de temps en ms, et ce malgré me recherches ...

Il y a la librairie <chrono> qui a l'air pas mal mais je n'arrive pas à l'utiliser sous QtCreator 2.8.1. (il faut activer une option pour la compilation, et je ne sais pas si j'en ai le droit pour l'éval)
Les fonctions time et difftime de <ctime> marchent à merveilles, mais donnent un résultat en seconde.
Et j'ai lu plusieurs fois une certaine fonction "gettimeofday()", mais je n'arrive pas à l'utiliser sous QtCreator...

Voilà, donc si les rares programmeurs d'ici ont une petite idée, je suis preneur. :)
Anciennement iArcadia / Zora Rouge

Ah ça oui, le C++11 est une petite merveille, <chrono> est un excellent ajout à la bibliothèque standard pour gérer tout ça. Ce serait bien pour toi d'y avoir le droit, mais d'expérience, je peux dire qu'énormément de prof en sont toujours au C++03 et au C89, donc bon...

Je ne vais faire que citer une réponse trouvée ailleurs sur internet, mais tu peux utiliser la macro CLOCKS_PER_SECOND présente dans le header <ctime>. Ça donnerait quelque chose comme ça :


#include <ctime>

clock_t time1 = clock();
// some code here
clock_t time2 = clock();
clock_t timediff = time2 - time1;

float timediff_sec = ((float)timediff) / CLOCKS_PER_SEC;


Sinon, tu peux regarder du côté des fonctions présentes dans les bibliothèques window ou POSIX, mais ça ne sera pas "standard" en ce sens que ça dépendra de la plate-forme :)

Ah bah c'est parfait merci Momo' ! :)

J'ai lu plusieurs articles/posts avec ce 'CLOCKS_PER_SEC' en cherchant sur Google, mais je comprenais rien à chaque fois, merci d'avoir rendu ça un peu plus clair. :D
Anciennement iArcadia / Zora Rouge

Sinon tu peux aussi incrementer une variable i dans 1 boucle et cronométrer pour savoir combien d'incrémentations il y a en une seconde, et ensuite tu divises.

exemple:

int i = 0;
while (1==1){
 i++;
  printf("%d", i);
}

Lance ce programme, et arrete le au bout d'1 seconde. Sur ma machine c'est:

zoe@ubuntu$ vim test.c
zoe@ubuntu$ gcc test.c
zoe@ubuntu$ ./a.out
[...]
Ctrl + C au bout d'1s
171895

Donc ensuite tu divises par 171895 et tu sais combien de secondes ce sont passées  :)


(si tu veux etre super precis fais ca 4-5 fois et ensuite fais la moyenne pour avoir la meilleure valeur... ca depend de quelle precision tu veux :) bon aller je vais me coucher moi)

Ouais, enfin ça fait quand même un joyeux bordel pour pas grand chose alors qu'il y a déjà des fonctions pour ce cas-là. :D
Et puis si l'appli tournait que sur ma machine ça irait, mais il y a des chances que je le fasse tourner sur différents mac/pc à l'université, et que le prof le fasse tourner sur son ordi personnel. :)
Anciennement iArcadia / Zora Rouge