55 votes

Comment mesurer le temps en C ?

Je veux savoir pendant combien de temps (approximativement) un bloc de code s'exécute. Quelque chose comme ceci :

startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);

Comment ?

88voto

KLee1 Points 3238

Vous pouvez utiliser le clock méthode dans time.h

Exemple :

clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;

24voto

Stephen Points 2878

Vous pouvez utiliser le time.h et plus particulièrement la bibliothèque temps y temps différé fonctions :

/* 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 dont le lien figure ci-dessus).

Veuillez noter que cette méthode ne peut donner que des secondes de précision - time_t enregistre les secondes écoulées depuis que le Époque UNIX (1er janvier 1970).

5voto

Ivan Talalaev Points 1307

Parfois, il est nécessaire de mesurer temps astronomique plutôt que Temps CPU (notamment ce qui est applicable 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;
}

2voto

selbie Points 20267

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);
}

1voto

Andreas Rejbrand Points 57164

J'utiliserais le Compteur de performance des requêtes y Fréquence d'exécution des requêtes des fonctions de l'API Windows. Appelez la première avant et après le bloc et soustrayez (current - old) pour obtenir le nombre de "ticks" entre les instances. Divisez ce nombre par la valeur obtenue par la dernière fonction pour obtenir la durée en secondes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X