Saltar al contenido

C – gettimeofday para calcular el tiempo?

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.

<

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *