2010-11-05 63 views
7

所以我讀這boost docs但我仍然不知道怎樣做這樣簡單的事升壓計時器:當我需要時如何獲得時間?

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

所以要得到我所做的東西執行時間。如何做這樣的事情?

+0

我不知道我理解。您想要檢索自上次重新啓動計時器以來的時間? – 2010-11-05 12:03:57

回答

19

使用boost::timer

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

注意一個boost::progress_timer的destuctor將顯示時間。因此,如果您的目標只是顯示函數中間過去的時間,請使用範圍。

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

儘管你的第一部分代碼回答了這個問題,'boost :: timer'並不顯示銷燬時間,因此你的答案的後半部分是不正確的。爲此,您需要'boost :: progress_timer',如下面的Steve所述。見[docs](http://www.boost.org/doc/libs/1_47_0/libs/timer/timer.htm) – Arth 2013-04-27 21:00:12

+0

@Arth fixed ... – log0 2013-09-16 09:12:07

5

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

更換這一點,你會得到你想要什麼,而不是使用printf雖然。

定時器開始施工並顯示銷燬(即在fn出口處)。這是一種典型的在C++中執行作用域任務(時序,鎖定等)的方式。

+0

這就是我的觀點 - 當函數結束時不返回時間值,直到部分函數停止工作時才顯示時間值。 – Rella 2010-11-05 12:24:57

+0

@Kabumbus:在這種情況下,使用''。 – 2010-11-05 12:27:08

0

根據上述特徵,還有以下想法,即經歷時間由析構函數顯示。

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