web-dev-qa-db-fra.com

Calcul du temps écoulé dans un programme C en millisecondes

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?

23
user69514

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;
}
33
Amro

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.

5
Pete Kirkham

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.

3
Dirk

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.

2
gbarry

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.

0
Edan Maor