Je veux savoir pendant combien de temps (environ) un bloc de code s'exécute. Quelque chose comme ça:
startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);
Comment?
Vous pouvez utiliser la méthode clock
dans time.h
Exemple:
clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
Vous pouvez utiliser la bibliothèque time.h , en particulier les fonctions time et difftime :
/* difftime example */
#include <stdio.h>
#include <time.h>
int main ()
{
time_t start,end;
double dif;
time (&start);
// Do some calculation.
time (&end);
dif = difftime (end,start);
printf ("Your calculations took %.2lf seconds to run.\n", dif );
return 0;
}
(Exemple adapté de la page Web difftime liée ci-dessus.)
Veuillez noter que cette méthode ne peut donner que quelques secondes d’exactitude - time_t
enregistre les secondes depuis l’époque UNIX (1er janvier 1970).
GetTickCount ().
#include <windows.h>
void MeasureIt()
{
DWORD dwStartTime = GetTickCount();
DWORD dwElapsed;
DoSomethingThatYouWantToTime();
dwElapsed = GetTickCount() - dwStartTime;
printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
Je voudrais utiliser les fonctions QueryPerformanceCounter et QueryPerformanceFrequency des fonctions de l'API Windows. Appelez l'ancien avant et après le bloc et soustrayez (ancien - actuel) pour obtenir le nombre de "ticks" entre les instances. Divisez cela par la valeur obtenue par cette dernière fonction pour obtenir la durée en secondes.
Parfois, il est nécessaire de mesurer le temps astronomique plutôt que le temps de calcul (en particulier ceci s'applique sur Linux ):
#include <time.h>
double what_time_is_it()
{
struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
return now.tv_sec + now.tv_nsec*1e-9;
}
int main() {
double time = what_time_is_it();
printf("time taken %.6lf\n", what_time_is_it() - time);
return 0;
}
Si vous n'avez pas besoin d'une résolution fantastique, vous pouvez utiliser GetTickCount (): http://msdn.Microsoft.com/en-us/library/ms724408(VS.85).aspx (Si c'est pour quelque chose d’autre que vos propres diagnostics simples, notez que ce nombre peut s’envelopper, vous devrez donc le gérer avec un peu d’arithmétique).
QueryPerformanceCounter est une autre option raisonnable. (Il est également décrit sur MSDN)