Overflow clock () Linux a 32 bit
Domanda
Devo misurare, in C ++ su Linux (e altri sistemi simili a Unix), il tempo CPU (non wall clock) impiegato da un lungo calcolo, quindi sto usando clock (). Problema: sui sistemi a 32 bit, questo si avvolge dopo circa 2000 o 4000 secondi.
Qual è la soluzione alternativa consigliata per questo?
Soluzione
Vuoi usare getrusage
che riempie la seguente struttura:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
Per il completamento, struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
Come sempre, consultare la manpage per i dettagli ( man getrusage
)
Altri suggerimenti
Hai bisogno della precisione fornita da clock ()
? In caso contrario, puoi usare time ()
due volte e fare la differenza:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
EDIT: time ()
misura il tempo reale (non il tempo della CPU) come indicato da litb nel suo commento, ma anche clock ()
. Se vuoi misurare il tempo della CPU, dovresti seguire i consigli di litb e usare getrusage ()
.
Un altro metodo possibile è utilizzare gettimeofday () due volte poiché restituisce la precisione ms.
Prendi il tempo su base ricorrente e incrementa anche una variabile moltiplicatrice int ogni volta che passa sopra?