Clock は、 time_point と duration を組み合わせて時刻を表すクラスです。
Clock::now() で現在時刻を返します。
以下は標準提供される Clock
namespace std { namespace chrono { class system_clock; class monotonic_clock; class high_resolution_clock; } }
タイマーとして使ったサンプル
system_clock::time_point start = system_clock::now(); // 現在時刻取得 // 時間のかかる処理・・・ nanoseconds sec = system_clock::now() - start; // 処理にかかった秒数を計算 cout << sec.count() << "秒かかった" << endl;
遅延(delay)として使ったサンプル
// 500ナノ秒待つ auto go = system_clock::now() + nanoseconds(500); while (system_clock::now() < go) ;
標準 Clock の詳細
【system_clock】
システム時刻を表すクラスで、 std::time_t との相互変換の機能を持つ
namespace std { namespace chrono { class system_clock { public: typedef see below rep; typedef ratio<unspecified, unspecified> period; typedef chrono::duration<rep, period> duration; typedef chrono::time_point<system_clock> time_point; static const bool is_monotonic = unspecified; static time_point now(); // std::time_tとの相互変換 static time_t to_time_t(const time_point& t); static time_point from_time_t(time_t t); } } }
【monotonic_clock】
time_point の値が地質学的時間進行につれて逆行しない Clock
namespace std { namespace chrono { class monotonic_clock { public: typedef unspecified rep; typedef ratio<unspecified , unspecified > period; typedef chrono::duration<rep, period> duration; typedef chrono::time_point<unspecified, duration> time_point; static const bool is_monotonic = true; static time_point now(); }; } }
【high_resolution_clock】
最短の tick 期間 を表す Clock
namespace std { namespace chrono { class high_resolution_clock { public: typedef unspecified rep; typedef ratio<unspecified , unspecified > period; typedef chrono::duration<rep, period> duration; typedef chrono::time_point<unspecified , duration> time_point; static const bool is_monotonic = unspecified; static time_point now(); }; } }
Clock クラスの要件
class clock_name { typedef ... rep; // 演算型をエミュレートする演算型あるいはクラス typedef ... period; // 秒を表すratio typedef ... duration; // chrono::duration<rep, period> typedef ... time_point; // chrono::time_point<clock_name> or chrono::time_point<clock_name, duration> static const bool is_monotonic; // 時間経過で時刻が逆行しない場合は true, それ以外は false static time_point now(); // current pointを表すtime_pointを返す };