• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class
    <chrono>

    std::chrono::steady_clock

    namespace std {
    namespace chrono {
      class steady_clock;
    }}
    

    概要

    steady_clockは、物理的な時間と同様、決して逆行することがない時間を表現するためのクロックである。

    エポック

    クロックごとの初期時間 (内部的にカウンタがあれば値ゼロ) をエポックと呼ぶ。

    steady_clockのエポックは未規定だが、多くの実装ではプログラム起動時間が時間ゼロのエポックとして定義され、その時間からの時間間隔がカウントされる。

    メンバ関数

    静的メンバ関数

    名前 説明 対応バージョン
    now 現在日時を取得する C++11

    メンバ型

    名前 説明 対応バージョン
    rep 時間間隔の内部表現となる算術型。具体的な型は未規定 C++11
    period 時間の周期を表すratioratio<unspecified, unspecified> C++11
    duration 時間間隔の型 C++11
    time_point 時間の一点を指す型 C++11

    メンバ定数

    名前 説明 対応バージョン
    static const bool is_steady 逆行しないクロックかどうかを表すbool値。値はtrue C++11まで
    static constexpr bool is_steady 逆行しないクロックかどうかを表すbool値。値はtrue C++14から

    #include <iostream>
    #include <chrono>
    #include <thread>
    
    using namespace std::chrono;
    
    int main()
    {
      // 1. 現在日時を取得
      steady_clock::time_point begin = steady_clock::now();
    
      // 2. 時間のかかる処理...
      std::this_thread::sleep_for(seconds(3));
    
      // 3. 現在日時を再度取得
      // 1~3の間にシステム時計が変更されても時間が逆行することはない
      steady_clock::time_point end = steady_clock::now();
    
      // 経過時間を取得
      seconds elapsed_time = duration_cast<seconds>(end - begin);
      std::cout << elapsed_time.count() << "秒" << std::endl;
    }
    

    出力例

    3秒
    

    バージョン

    言語

    • C++11

    処理系

    • GCC: 4.6.1
    • Visual C++: 2012 , 2013 , 2015
      • 2012, 2013は逆行が起こり得る、すなわち正しくない実装であった。
      • 2015からは、Windows APIのQueryPerformanceCounter関数を使用した実装である。

    参照