std::chronoによる処理時間測定
処理時間の測定は、clockやgettimeofdayを使う事が多いと思いますが、あまりC++っぽくありません。そこで、C++0xからstd名前空間に入ったstd::chronoを使ってみようと思います。
std::chrono::system_clock::now()で現在の時刻(time_point)が取れるので、それを時間を計測したい処理の前後で取り、差を求めます。operator -が使えるのがC++っぽくていいですね。system_clock::now()で取れる時間の精度は実装依存なので、差を求める時にmillisecondsに変換して返しています。
#include <iostream> #include <chrono> #include <unistd.h> template <class F> std::chrono::milliseconds take_time(F&& f) { namespace chrono = std::chrono; auto const begin = chrono::system_clock::now(); f(); auto const end = chrono::system_clock::now(); return chrono::duration_cast<chrono::milliseconds>(end - begin); } int main() { auto const time = take_time([] { sleep(5); }); std::cout << "time: " << time.count() << " ms" << std::endl; return 0; }