clock() temps écoulé et printf
Le
pere.noel
si je mesure le temps écoulé par :
clock_t start, stop;
[]
start = clock();
[]
printf();
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %f", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
--
une bévue
clock_t start, stop;
[]
start = clock();
[]
printf();
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %f", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
--
une bévue

Poser une question


Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).
La norme ne définit que CLOCKS_PER_SEC dans ce domaine. Mais quel
serait l'intérêt ? Donner "par seconde" est plus précis. Après, vous
pouvez faire:
#define CLOCKS_PER_MILLISEC (CLOCKS_PER_SEC / 1000)
ou
#define FDCLOCKS_PER_MILLISEC ((double)CLOCKS_PER_SEC / 1000)
Chez moi, CLOCKS_PER_SEC vaut 1000.
--
Pierre Maurette
Ah mais je ne dis pas que ça ne marche pas, ce qu'il y a c'est qu'entre
mon "start = clock();" et mon "stop = clock();" il y a un printf dans
une boucle qui sort 689 lignes et, il me semble, que tout se passe comme
si les 689 printf étaient mis dans un buffer qui se débrouille tout seul
et donc que le temps total d'éxécution n'est pas le temps "percu" au
terminal.
--
une bévue
bon j'ai mis la ligne de pause à :
system("sleep 10");
et j'obtiens bien 10 s de pause
MAIS le résultat est :
Temps écoulé : 0.010000
donc avec un facteur 1000 dans le nez )))
ça ne peut-être qu'un pb au niveau de la ligne :
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
que je ne comprend pas très bien je dois dire car j'ai :
clock_t start, stop;
double elapsed;
ce que je ne comprends pas c'est le cast :
((double)stop - start)
est-ce qu'il caste la différence de stop - start ou seulement stop ?
j'ai piqué cette ligne sur developpez.
j'ai casté différemment :
elapsed = (double) (stop - start) / (double)CLOCKS_PER_SEC;
ça ne change rien au résultat...
par ailleurs j'ai :
CLOCKS_PER_SEC : 100.000000
mystère et boules de gomme ?
--
une bévue
Si elapsed est un double, il faut l'afficher avec %lf.
Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).
A+,
Stéphane.
ah bon ?
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
ah d'accord, et par exemple alors, quand je fais un printf c'est en
qqsorte du temps en *** dehors *** du prog ? ie un autre process
s'occupe de ça (je pense que oui sous *nix)...
j'essaire avec time, date ou equivalent.
merci, j'ai pigé qqc !
--
une bévue