Chrono в C++

е C++ хедър, който предоставя колекция от типове и функции за работа с времето. Той е част от C++ Standard Template Library (STL) и е включен в C++11 и по-нови версии.

предоставя три основни типа часовници: system_clock steady_clock и high_resolution_clock. Тези часовници се използват за измерване на времето по различни начини.

system_clock представлява стенен часовник в реално време за цялата система. Влияе се от корекциите на времето на системата.
steady_clock представлява монотонно нарастващ часовник, който не се влияе от промени в системното време.
high_resolution_clock е часовникът с най-краткия наличен в системата тик период.

също така предоставя колекция от типове продължителност, включително продължителност които могат да се използват за представяне на продължителност от време. Rep е типът на представяне (като int или long), а Period е съотношението на продължителността (като наносекунди или секунди).
Допълнително предоставя колекция от типове времеви точки, включително time_point които могат да се използват за представяне на момент от време. Часовникът е тип часовник (като system_clock) и Duration е тип продължителност (като секунди)

Библиотеката Chrono се използва за работа с дата и час. Тази библиотека е предназначена да се справи с факта, че таймерите и часовниците може да са различни в различните системи и по този начин да се подобрява с течение на времето по отношение на прецизността. Уникалното при хроно е, че осигурява a прецизно неутрална концепция чрез отделяне на продължителността и точката от време (времева точка) от конкретни часовници. chrono е името на заглавка, а също и на подпространство от имена: Всички елементи в тази заглавка (с изключение на специализациите common_type) не са дефинирани директно в пространството от имена std (като повечето от стандартната библиотека), а под std::chrono пространство от имена . Елементите в това заглавие се занимават с времето. Това се прави главно с помощта на три концепции:

Продължителност

Обект на продължителност изразява времеви интервал чрез броене като минута, два часа или десет милисекунди. Например „42 секунди“ може да бъде представено чрез продължителност, състояща се от 42 такта на единица време от 1 секунда. 

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. 

Часовник

Часовникът се състои от начална точка (или епоха) и тик-рейт. Например часовник може да има епоха от 22 февруари 1996 г. и да тиктака всяка секунда. C++ дефинира три типа часовник:

    системен_часовник -Това е текущото време според системата (обикновен часовник, който виждаме в лентата с инструменти на компютъра). Написано е като- std::chrono::system_clock постоянен_часовник -Това е монотонен часовник, който никога няма да бъде коригиран. Работи с еднаква скорост. Написано е като- std::chrono::steady_clock часовник с висока_резолюция - Осигурява възможно най-малкия тик период. Написано е като-std::chrono::high_resolution_clock

Времева точка

Обект time_point изразява момент във времето спрямо епохата на часовника. Вътрешно обектът съхранява обект от тип продължителност и използва типа Часовник като референция за своята епоха.  

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 

Важно е да се отбележи, че прецизността и точността на часовниците и продължителността, предоставени от може да варира в зависимост от системата и платформата и винаги е добра идея да проверите документацията на вашата платформа за повече информация.

Създаване на тест