C++ のクロノ

は、時間を処理するための型と関数のコレクションを提供する C++ ヘッダーです。これは C++ 標準テンプレート ライブラリ (STL) の一部であり、C++11 以降のバージョンに含まれています。

は、system_ Clocksteady_Clock と high_resolution_Clock という 3 つの主要なタイプのクロックを提供します。これらの時計は、さまざまな方法で時間を測定するために使用されます。

system_ Clock は、システム全体のリアルタイムの壁時計を表します。システムの時刻調整の影響を受けます。
steady_ Clock は、システム時間の変更の影響を受けずに単調増加するクロックを表します。
high_resolution_ Clock は、システム上で利用可能な最小のティック周期を持つクロックです。

期間を含む期間タイプのコレクションも提供します 時間の長さを表すために使用できます。 Rep は表現タイプ (int やlong など) で、Period は期間の比率 (ナノ秒や秒など) です。
さらに time_point を含む時点タイプのコレクションを提供します ある時点を表すために使用できます。 Clock はクロックのタイプ (system_lock など)、Duration は継続時間のタイプ (秒など) です。

Chrono ライブラリは日付と時刻を扱うために使用されます。このライブラリは、タイマーとクロックがシステムごとに異なる可能性があるという事実に対処し、時間の経過とともに精度が向上するように設計されました。クロノのユニークな点は、 特定のクロックから期間と時点 (タイムポイント) を分離することによる、精度中立の概念。 chrono はヘッダーの名前であり、サブ名前空間の名前でもあります。このヘッダー内のすべての要素 (common_type 特殊化を除く) は、(ほとんどの標準ライブラリと同様) std 名前空間の下で直接定義されるのではなく、 std::chrono 名前空間 。このヘッダーの要素は時間を扱います。これは主に次の 3 つの概念によって行われます。

間隔

期間オブジェクトは、分、2 時間、または 10 ミリ秒などのカウントによって時間範囲を表します。 たとえば、「42 秒」は、1 秒の時間単位の 42 ティックで構成される期間で表すことができます。 

CPP
   // C++ program to illustrate the utility    // function duration::count   #include       #include      int     main     ()   {      using     namespace     std  ::  chrono  ;      // std::chrono::milliseconds is an       // instantiation of std::chrono::duration:- 1 second      milliseconds     mil  (  1000  );             mil     =     mil  *  60  ;          std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  duration     (  in     periods  )  :     &  quot  ;;      std  ::  cout     &  lt  ;  &  lt  ;     mil  .  count  ()     &  lt  ;  &  lt  ;     &  quot  ;     milliseconds  .    n  &  quot  ;;          std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  duration     (  in     seconds  )  :     &  quot  ;;      std  ::  cout     &  lt  ;  &  lt  ;     (  mil  .  count  ()     *     milliseconds  ::  period  ::  num     /         milliseconds  ::  period  ::  den  );      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;     seconds  .    n  &  quot  ;;      return     0  ;   }   

出力:

duration (in periods): 60000 milliseconds. duration (in seconds): 60 seconds. 

クロック

クロックは、開始点 (またはエポック) とティック レートで構成されます。たとえば、時計のエポックが 1996 年 2 月 22 日で、毎秒時を刻むとします。 C++ では、次の 3 つのクロック タイプが定義されています。

    システムクロック -システムに従った現在時刻です(コンピュータのツールバーに表示される通常の時計)。 std::chrono::system_ Clock と書かれています。 安定したクロック - 決して調整されることのない、一定の速度で進む単調な時計です。 std::chrono::steady_ Clock と書かれます。 高解像度クロック - 可能な限り最小のティック期間を提供します。 -std::chrono::high_resolution_lock と書かれています。

時点

time_point オブジェクトは、クロックのエポックを基準とした時点を表します。内部的には、オブジェクトは継続時間タイプのオブジェクトを格納し、そのエポックの参照として Clock タイプを使用します。  

CPP
   // C++ program to illustrate time point   // and system clock functions   #include      #include     #include     // Function to calculate   // Fibonacci series   long     fibonacci  (  unsigned     n  )   {      if     (  n     &  lt  ;     2  )     return     n  ;      return     fibonacci  (  n  -1  )     +     fibonacci  (  n  -2  );   }   int     main  ()   {      // Using time point and system_clock      std  ::  chrono  ::  time_point  &  lt  ;  std  ::  chrono  ::  system_clock  &  gt  ;     start       end  ;      start     =     std  ::  chrono  ::  system_clock  ::  now  ();      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  f  (  42  )     =     &  quot  ;     &  lt  ;  &  lt  ;     fibonacci  (  42  )     &  lt  ;  &  lt  ;     'n'  ;      end     =     std  ::  chrono  ::  system_clock  ::  now  ();      std  ::  chrono  ::  duration  &  lt  ;  double  &  gt  ;     elapsed_seconds     =     end     -     start  ;      std  ::  time_t     end_time     =     std  ::  chrono  ::  system_clock  ::  to_time_t  (  end  );      std  ::  cout     &  lt  ;  &  lt  ;     &  quot  ;  finished     computation     at     &  quot  ;     &  lt  ;  &  lt  ;     std  ::  ctime  (  &  amp  ;  end_time  )      &  lt  ;  &  lt  ;     &  quot  ;  elapsed     time  :     &  quot  ;     &  lt  ;  &  lt  ;     elapsed_seconds  .  count  ()     &  lt  ;  &  lt  ;     &  quot  ;  s    n  &  quot  ;;   }   

出力:

f(42) = 267914296 finished computation at Wed Jan 4 05:13:48 2017 elapsed time: 2.14538s 

によって提供されるクロックと期間の精度と精度に注意することが重要です。 システムやプラットフォームによって異なる場合があるため、詳細についてはプラットフォームのドキュメントを確認することをお勧めします。

クイズの作成