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 ?

1voto

Daniel Points 386

La bibliothèque C standard fournit la fonction time et elle est utile si vous avez seulement besoin de comparer des secondes. Si vous avez besoin d'une précision de l'ordre de la milliseconde, la méthode la plus portable consiste à appeler la fonction timespec_get . Il peut donner l'heure avec une précision de l'ordre de la nanoseconde, si le système le permet. L'appeler, cependant, demande un peu plus d'effort car cela implique un struct. Voici une fonction qui convertit simplement le struct en un simple entier de 64 bits.

#include <stdio.h>
#include <inttypes.h>
#include <time.h>

int64_t millis()
{
    struct timespec now;
    timespec_get(&now, TIME_UTC);
    return ((int64_t) now.tv_sec) * 1000 + ((int64_t) now.tv_nsec) / 1000000;
}

int main(void)
{
    printf("Unix timestamp with millisecond precision: %" PRId64 "\n", millis());
}

Contrairement à clock cette fonction renvoie un timestamp Unix afin de prendre en compte correctement le temps passé dans les fonctions de blocage, telles que sleep . Il s'agit d'une propriété utile pour l'évaluation comparative et la mise en œuvre de délais qui prennent en compte le temps d'exécution.

0voto

user357501 Points 11

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'enrouler, vous devrez donc gérer cela avec un peu d'arithmétique).

QueryPerformanceCounter est une autre option raisonnable. (Elle est également décrite sur MSDN)

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