Nuestro equipo de trabajo ha pasado mucho tiempo buscando para dar espuestas a tus dudas, te brindamos la solución así que deseamos servirte de gran apoyo.
Solución:
Para restar valores de tiempo:
gettimeofday(&t0, 0);
/* ... */
gettimeofday(&t1, 0);
long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec;
Esto supone que trabajará con intervalos de menos de ~ 2000 segundos, momento en el que la aritmética puede desbordarse según los tipos utilizados. Si necesita trabajar con intervalos más largos, simplemente cambie la última línea a:
long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;
Si desea medir la eficiencia del código o, de cualquier otra forma, medir el tiempo intervaloslo siguiente será más fácil:
#include
int main()
clock_t start = clock();
//... do work here
clock_t end = clock();
double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
return 0;
hth
La respuesta ofrecida por @Daniel Kamil Kozar es la respuesta correcta: gettimeofday en realidad no debe usarse para medir el tiempo transcurrido. Utilice clock_gettime(CLOCK_MONOTONIC) en su lugar.
Las páginas man dicen: la hora devuelta por gettimeofday() se ve afectada por saltos discontinuos en la hora del sistema (por ejemplo, si el administrador del sistema cambia manualmente la hora del sistema). Si necesita un reloj que aumente monótonamente, consulte clock_gettime(2).
Opengroup dice: las aplicaciones deben usar la función clock_gettime() en lugar de la función obsoleta gettimeofday().
Todo el mundo parece amar gettimeofday hasta que se encuentran con un caso en el que no funciona o no está allí (VxWorks)… clock_gettime es fantásticamente increíble y portátil.
<