Je veux calculer le temps en millisecondes nécessaire à l'exécution d'une partie de mon programme. J'ai cherché en ligne, mais il n'y a pas beaucoup d'informations sur ce sujet. L'un d'entre vous sait comment faire cela?
La meilleure façon de répondre est avec un exemple:
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
/* Return 1 if the difference is negative, otherwise 0. */
int timeval_subtract(struct timeval *result, struct timeval *t2, struct timeval *t1)
{
long int diff = (t2->tv_usec + 1000000 * t2->tv_sec) - (t1->tv_usec + 1000000 * t1->tv_sec);
result->tv_sec = diff / 1000000;
result->tv_usec = diff % 1000000;
return (diff<0);
}
void timeval_print(struct timeval *tv)
{
char buffer[30];
time_t curtime;
printf("%ld.%06ld", tv->tv_sec, tv->tv_usec);
curtime = tv->tv_sec;
strftime(buffer, 30, "%m-%d-%Y %T", localtime(&curtime));
printf(" = %s.%06ld\n", buffer, tv->tv_usec);
}
int main()
{
struct timeval tvBegin, tvEnd, tvDiff;
// begin
gettimeofday(&tvBegin, NULL);
timeval_print(&tvBegin);
// lengthy operation
int i,j;
for(i=0;i<999999L;++i) {
j=sqrt(i);
}
//end
gettimeofday(&tvEnd, NULL);
timeval_print(&tvEnd);
// diff
timeval_subtract(&tvDiff, &tvEnd, &tvBegin);
printf("%ld.%06ld\n", tvDiff.tv_sec, tvDiff.tv_usec);
return 0;
}
Une autre option (au moins sur certains UNIX) est clock_gettime et les fonctions associées. Ceux-ci permettent d'accéder à diverses horloges en temps réel et vous pouvez sélectionner l'une des plus hautes résolutions et jeter la résolution dont vous n'avez pas besoin.
La fonction gettimeofday
renvoie l'heure avec une précision en microsecondes (si la plateforme peut le supporter, bien sûr):
La fonction gettimeofday () doit obtenir l'heure actuelle, exprimée en secondes et microsecondes depuis l'époque, et la stocker dans la structure temporelle pointée par tp. La résolution de l'horloge système n'est pas spécifiée.
Les bibliothèques C ont une fonction pour vous permettre d'obtenir l'heure du système. Vous pouvez calculer le temps écoulé après avoir capturé les heures de début et de fin.
La fonction s'appelle gettimeofday () et vous pouvez consulter la page de manuel pour savoir quoi inclure et comment l'utiliser.
Sous Windows, vous pouvez simplement faire ceci:
DWORD dwTickCount = GetTickCount();
// Perform some things.
printf("Code took: %dms\n", GetTickCount() - dwTickCount);
Pas la solution la plus générale/élégante, mais agréable et rapide lorsque vous en avez besoin.