2010-11-05 8 views
7

así que leí este boost docs pero todavía no ven cómo hacer tal cosa simpleTemporizador de refuerzo: ¿cómo obtener tiempo cuando lo necesito?

int main() { 
    //stuff 
    startTimer(); 
    // do stuff 
    int i =getTimerValue(); 
    //stuff 
} 

así que para obtener el tiempo de ejecución de cosas que he hecho. ¿Cómo hacer tal cosa?

+0

No estoy seguro de que lo entiendo. ¿Desea recuperar el tiempo transcurrido desde el último reinicio del temporizador? –

Respuesta

19

Uso boost::timer

#include <boost/timer.hpp> 
int main() { 
    boost::timer t; // start timing 
    ... 
    double elapsed_time = t.elapsed(); 
    ... 
} 

Tenga en cuenta que la destuctor de un boost::progress_timer mostrará el tiempo. Así que use el alcance si su objetivo es solo mostrar el tiempo transcurrido en el medio de una función.

int main() { 
    { 
    boost::progress_timer t; // start timing 
    ... 
    } // elapsed time displayed here when t is destructed 
    ... 
} 
+0

Aunque su primer fragmento de código responde a la pregunta, 'boost :: timer' no muestra el tiempo transcurrido en la destrucción, por lo que la segunda mitad de su respuesta es incorrecta. Para esto necesitas 'boost :: progress_timer' como lo describe Steve a continuación. Consulte [docs] (http://www.boost.org/doc/libs/1_47_0/libs/timer/timer.htm) – Arth

+0

@Arth corregido ... – log0

5

reemplazar esto por

#include <boost/progress.hpp> 
void function() 
{ 
    progress_timer t; // start timing 
    // do stuff 
    return 0; 
} 

y obtendrá lo que quiere, no usar printf sin embargo.

El temporizador se inicia en la construcción y muestra la destrucción (es decir, en la salida fn). Esta es una forma típica de hacer las tareas de alcance (tiempo, bloqueo, etc.) RAII en C++.

+0

ese es mi punto: devolver el valor del tiempo no cuando la función finalizó, no mostrando el valor del tiempo hasta que una parte de la función dejó de funcionar. – Rella

+0

@Kabumbus: En ese caso, use ''. –

0

También existe la siguiente idea basada en la característica mencionada de que el tiempo transcurrido se muestra por el destructor.

#include "boost/timer/timer.hpp" 
int main() 
{ 
    // ... 
    boost::timer:auto_cpu_timer *boost_timer = new boost::timer:auto_cpu_timer(); 
    // we want to measure the time of execution of this part of code 
    // ... 
    delete boost_timer; // show the elapsed time 
    // then we can repeat 
    boost_timer = new boost::timer:auto_cpu_timer(); 
    // ... 
    delete boost_timer; 
    // ... 
} 
Cuestiones relacionadas