(c++11)How to use "chrono(c++11)" for timestamp.
#Abstract
chronoとは, c++11で追加された精度に優れた時間ライブラリであり, gccやclangだけではなくvisual studioでも用いることができる.
しかし, 一方でchronoの扱いづらさの指摘もある.
問題は、これらのコンセプトを学ぶのに、労力がかかるという事だ。私は規格を読めるし、Boostや標準化委員会での議論の経緯も知っているからいいものの、通常のユーザーがプログラミング言語をただ使うためだけに、規格や規格制定時の議論や背景の理解を必要とするべきではない。
また,"gettimeofday"はLinuxのような処理系で用いられてきた.しかし, gettimeofdayで用いられるtimezone構造体はobsolete(すたれた, 時代遅れの, もはや用いられない)であり( http://man7.org/linux/man-pages/man2/gettimeofday.2.html ), かつOSを制限する.
そこで, chronoを用いた時間計測の簡単化に取り組む.
#Chrono
chronoを用いた処理時間の計測の一般的な使い方は以下である.
#include <iostream>
#include <chrono>
int main(){
std::chrono::system_clock::time_point start, end; // 型は auto で可
start = std::chrono::system_clock::now(); // 計測開始時間
// 処理
end = std::chrono::system_clock::now(); // 計測終了時間
double elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count(); //処理に要した時間をミリ秒に変換
}
型はautoでいいとしても, 関数を覚えたりTemplateを理解していないと使いにくい.
そこで, 以下のようなコードを書きたい.
int main(){
double start,end;
start = get_time_sec();
// 処理
end = get_time_sec();
double elapsed=end-start;
}
そのためのget_time_sec()関数は以下のように設計した.
#include <chrono>
using namespace std::chrono;
inline double get_time_sec(void){
return static_cast<double>(duration_cast<nanoseconds>(steady_clock::now().time_since_epoch()).count())/1000000000;
}
無理やりstatic_castでキャストしたけどもっといい実装あるかな...
終了