凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

boost::timerを使って1行コードを挟むだけで経過時間計測

boost::timerはCの標準ライブラリのclock()を使って簡単に時間計測をしてくれる便利なクラスです.基本的な使い方は,以下のようになります.

#include <iostream>
#include <boost/timer.hpp>
#include <windows.h>	// Sleep用

int main()
{
	boost::timer t; // タイマーの開始
	Sleep(1234);
	std::cout << t.elapsed() << " sec" << std::endl;	// 1.234 sec
	t.restart(); // タイマーのリセット
	Sleep(2345);
	std::cout << t.elapsed() << " sec" << std::endl;	// 2.344 sec
	return 0;
}

elapsed(訳:経過した)でインスタンス化してからの時間(秒)がdouble型で返されます.restartするとタイマーがリセットされ再び0からカウントされます.

計測用クラスを作成

しかしながら,ちょっとコードが冗長になってしまうのが気になります.そこで,適当にタイトルを付けることの出来るクラスをboost::timerを継承して作成してみます.

#include <iostream>
#include <iomanip>
#include <boost/timer.hpp>
#include <windows.h>

class CTimer : public boost::timer
{
public:
	void operator()(const char* title)
	{
		std::cout << std::setw(20) << std::left << title;
		std::cout << ": " << elapsed() << " sec" << std::endl;
		restart();
	}
};

int main()
{
	CTimer t;
	Sleep(1234);
	t("test1(1.234 sec)");
	Sleep(2345);
	t("test2(2.345 sec)");
	return 0;
}

output:
test1(1.234 sec)    : 1.234 sec
test2(2.345 sec)    : 2.359 sec

大したことはしてないですが,非常に便利ですね.

参考文献

簡単に時間計測したいと思い,昔,RSSにそういう記事が入っていたのを見た気がする,ということを思い出して,拝見させて頂きました.採用させて頂こう!と思った矢先,コメント欄にboost::timerなる記述を見つけたことが発端です.

boostの時間関連ライブラリについて例を交えて分かりやすく説明してくれています.

本家ドキュメント