2010-11-05 13 views
7

Così ho letto questo boost docs ma io ancora non vedo come fare una cosa sempliceTimer di aumento: come ottenere il tempo quando ho bisogno?

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

in modo da ottenere il tempo di esecuzione di roba che ho fatto. Come fare una cosa del genere?

+0

Non sono sicuro di aver capito. Vuoi recuperare il tempo trascorso dall'ultimo riavvio del timer? –

risposta

19

Usa boost::timer

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

Si noti che la destuctor di un boost::progress_timer visualizzerà il tempo. Quindi usa scope se il tuo obiettivo è solo quello di visualizzare il tempo trascorso nel mezzo di una funzione.

+0

Sebbene il primo frammento di codice risponda alla domanda, il 'boost :: timer' non mostra il tempo trascorso alla distruzione, quindi la seconda metà della risposta non è corretta. Per questo hai bisogno di 'boost :: progress_timer' come descritto da Steve qui sotto. Vedi [docs] (http://www.boost.org/doc/libs/1_47_0/libs/timer/timer.htm) – Arth

+0

@Arth risolto ... – log0

5

sostituirlo con

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

e otterrete quello che volete, non utilizzando però printf.

Il timer inizia alla costruzione e viene visualizzato in caso di distruzione (ad esempio in fn uscita). Questo è tipicamente lo RAII modo di eseguire attività con scope (timing, locking ecc.) In C++.

+0

questo è il mio punto - per restituire il valore del tempo non quando la funzione è terminata, non mostrando il valore del tempo fino a quando parte della funzione smette di funzionare. – Rella

+0

@Kabumbus: In tal caso, utilizzare ''. –

0

C'è anche la seguente idea basata sulla funzione menzionata che il tempo trascorso è mostrato dal distruttore.

#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; 
    // ... 
} 
Problemi correlati