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;
}