Medir tiempo en milisegundos C++

Aziwar

Buenas! Como puedo medir el tiempo en milisegundos en C++ bajo Linux?

time_t t1 = time (NULL);
compresor.comprimir(fichero, fichero2);
time_t t2 = time (NULL);

cout << "Duracion de la compresion: " << difftime(t2,t1) << endl;

Lo tengo hecho de este modo, pero solo devuelve segundos y muchas veces la función se ejecuta en menos de 1 segundo.

LOc0

Te lo pongo porque lo tengo muy a mano:

#include <stdio.h>
#include <sys/time.h> //gettimeofday()

int main()
{
struct timeval comienzo, final;

gettimeofday(&comienzo, NULL);

//HACES LO QUE SEA


gettimeofday(&final, NULL);


printf("\nComienzo: %.3f s\n", comienzo.tv_sec+(float)comienzo.tv_usec/1000000);
printf("Final: %.3f s\n", final.tv_sec+(float)final.tv_usec/1000000);
printf("\nDuración del programa: %.3f s\n\n", (final.tv_sec+(float)final.tv_usec/1000000)-(comienzo.tv_sec+(float)comienzo.tv_usec/1000000));

return 0;
}

Salu2 ;)

BLZKZ

tambien puedes con la libreria CTime y clock()

puedes comparar las vueltas de reloj que da el sistema y luego lo divides por CLOCKS_PER_SEC y tienes hasta la millonesima parte del segundo creo.

que sea mas o menos exacto depende de que la frecuencia del procesador no varie.

dagavi

O "getrusage" y "times" (que no time) que son llamadas al sistema.

El struct de resultados de getrusage (struct timeval) te devuelve en dos campos el tiempo: uno que son los segundos (un número entero de segundos) y otro que son los microsegundos (obviamente excluyendo los segundos enteros)

Es decir, te iría bien para lo que tu quieres: 42'0484 sería:
tv_sec = 42
tv_usec = 48400

La diferencia entre times y getrusage es que getrusage te devuelve el tiempo (user + system) mientras que times te devuelve (user + system + elapsed)

Usuarios habituales

  • dagavi
  • BLZKZ
  • LOc0
  • Aziwar