2010-11-05 3 views
7

Alors je lis ce boost docs mais je ne vois toujours pas comment faire cette chose simpleMinuterie Boost: comment obtenir le temps dont j'ai besoin?

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

afin d'obtenir du temps d'exécution de choses que je l'ai fait. Comment faire une telle chose?

+0

Je ne suis pas sûr de comprendre. Vous voulez récupérer le temps écoulé depuis le dernier redémarrage de la minuterie? –

Répondre

19

Utilisez boost::timer

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

Notez que le destuctor d'un boost::progress_timer affiche le temps. Utilisez donc la portée si votre objectif est simplement d'afficher le temps écoulé au milieu d'une fonction.

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

Bien que votre premier extrait de code réponde à la question, boost: timer n'affiche pas le temps écoulé à la destruction, donc la seconde moitié de votre réponse est incorrecte. Pour cela, vous avez besoin de 'boost :: progress_timer' comme décrit par Steve ci-dessous. Voir [docs] (http://www.boost.org/doc/libs/1_47_0/libs/timer/timer.htm) – Arth

+0

@Arth corrigé ... – log0

5

remplacer par

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

et vous obtiendrez ce que vous voulez, ne pas utiliser printf cependant.

La minuterie démarre lors de la construction et s'affiche en cas de destruction (c'est-à-dire à la sortie fn.). Il s'agit généralement d'un moyen de réaliser des tâches étendues (synchronisation, verrouillage, etc.) en C++.

+0

c'est mon point - pour retourner la valeur de temps pas quand la fonction s'est terminée, ne montrant pas la valeur de temps jusqu'à ce que la partie de la fonction a cessé de fonctionner. – Rella

+0

@Kabumbus: Dans ce cas, utilisez '. –

0

Il existe également l'idée suivante basée sur la caractéristique mentionnée que le temps écoulé est montré par le destructeur.

#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; 
    // ... 
} 
Questions connexes