Débordement de l'horloge Linux 32 bits ()
Question
Je dois mesurer, en C ++ sous Linux (et d’autres systèmes de type Unix), le temps que prend un processeur (pas une horloge murale) pour un long calcul, c’est pourquoi j’utilise clock (). Problème: sur les systèmes 32 bits, cette opération s’achève après environ 2000 ou 4000 secondes.
Quelle est la solution de contournement recommandée pour cela?
La solution
Vous voulez utiliser getrusage
qui remplit la structure suivante:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
Pour terminer, struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Comme toujours, consultez la page de manuel pour plus de détails ( man getrusage
)
Autres conseils
Avez-vous besoin de la précision fournie par clock ()
? Sinon, vous pouvez utiliser time ()
deux fois et prendre la différence:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
EDIT: time ()
mesure le temps réel (et non le temps processeur) comme le souligne litb dans son commentaire, mais il en va de même pour clock ()
. Si vous souhaitez mesurer le temps processeur, suivez les conseils de litb et utilisez getrusage ()
.
Une autre méthode possible consiste à utiliser deux fois gettimeofday () car elle retourne une précision ms.
Obtenir le temps de manière récurrente et également incrémenter une variable multiplicatrice int chaque fois qu'il survole?