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 ?
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 ?
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.
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 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.