Declaration
template <class GetTimePolicy = detail::timeval_type> class basic_timer; typedef basic_timer<> timer;
Overview
タイマー用クラスです.オブジェクト生成時,または restart() メソッドが呼ばれた時点からの経過時間を記憶します.時刻を取得するために, UNIX 系では gettimeofday(),Windows では timeGetTime() を用いています. ただし,Windows で使用する際に CLX_USE_HIGH_PRECISION_TIMER を定義した場合, timeGetTime() の代わりに QueryPerformanceCounter() を使用します.
timer は,時刻を記憶する領域を 2 つ持っています.もう 1 つの領域は,update() メソッドが呼ばれる度に更新されていきます.そのため,elapsed() メソッドは最後に update() メソッドが呼ばれてからの経過時間,total_elapsed() メソッドはオブジェクト生成時, または restart() メソッドが呼ばれた時点からの経過時間を返します.
Example
#include <iostream> #include "clx/timer.h" int heavy_func(int x) { return x <= 0 ? 1 : heavy_func(x - 1) + heavy_func(x - 1); } int main(int argc, char* argv[]) { clx::timer t; std::cout << "precision: " << t.precision() << " sec." << std::endl; std::cout << "start heavy_func(28)" << std::endl; heavy_func(28); std::cout << "total: " << t.total_elapsed() << " sec." << std::endl; std::cout << "latest: " << t.update() << " sec." << std::endl; std::cout << std::endl; std::cout << "start heavy_func(25)" << std::endl; heavy_func(25); std::cout << "total: " << t.total_elapsed() << " sec." << std::endl; std::cout << "latest: " << t.elapsed() << " sec." << std::endl; return 0; }
Result precision: 1e-06 sec. start heavy_func(28) total: 14.621 sec. latest: 14.621 sec. start heavy_func(25) total: 16.293 sec. latest: 1.672 sec.
Template Parameter
- GetTimePolicy
- 時刻を取得するためのクラスを指定します.
Related Types
typedef GetTimePolicy policy;
Construction and Member Functions
basic_timer(); void restart(); double update(); double total_elapsed() const; double elapsed() const; double precision() const;
elapsed() メソッドは最後に update() メソッドが呼ばれてからの経過時間, total_elapsed() メソッドはオブジェクト生成時,または restart() メソッドが呼ばれた時点からの経過時間を返します.