Chrono w C++

to nagłówek C++, który udostępnia kolekcję typów i funkcji do pracy z czasem. Jest częścią standardowej biblioteki szablonów C++ (STL) i jest zawarta w C++ 11 i nowszych wersjach.

udostępnia trzy główne typy zegarów: zegar_systemowy zegar_stały i zegar_wysokiej rozdzielczości. Zegary te służą do pomiaru czasu na różne sposoby.

system_clock reprezentuje ogólnosystemowy zegar ścienny czasu rzeczywistego. Wpływ na to mają ustawienia czasu systemu.
stable_clock reprezentuje monotonicznie rosnący zegar, na który nie mają wpływu zmiany czasu systemowego.
high_registration_clock to zegar z najkrótszym okresem taktu dostępnym w systemie.

udostępnia również zbiór typów czasu trwania, w tym czas trwania które można wykorzystać do reprezentowania czasu trwania. Rep to typ reprezentacji (np. int lub long), a Period to stosunek czasu trwania (np. nanosekundy lub sekundy).
Dodatkowo udostępnia kolekcję typów punktów czasowych, w tym time_point które można wykorzystać do przedstawienia punktu w czasie. Clock to typ zegara (np. zegar_systemowy), a Duration to typ czasu trwania (np. sekundy)

Biblioteka Chrono służy do obsługi daty i godziny. Bibliotekę tę zaprojektowano, aby poradzić sobie z faktem, że timery i zegary mogą się różnić w różnych systemach, a tym samym z czasem poprawić precyzję. Wyjątkowość chrono polega na tym, że zapewnia koncepcja neutralna pod względem precyzji poprzez oddzielenie czasu trwania i punktu czasu (punktu czasowego) od określonych zegarów. chrono jest nazwą nagłówka, a także podprzestrzeni nazw: Wszystkie elementy w tym nagłówku (z wyjątkiem specjalizacji typu common_type) nie są zdefiniowane bezpośrednio w przestrzeni nazw std (jak większość standardowej biblioteki), ale w std::chrono przestrzeni nazw . Elementy w tym nagłówku dotyczą czasu. Odbywa się to głównie za pomocą trzech koncepcji:

Czas trwania

Obiekt czasu trwania wyraża przedział czasu za pomocą licznika, na przykład minuty, dwóch godzin lub dziesięciu milisekund. Na przykład „42 sekundy” można przedstawić jako czas trwania składający się z 42 taktów w jednostce czasu wynoszącej 1 sekundę. 

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  ;   }   

Wyjście:

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

Zegar

Zegar składa się z punktu początkowego (lub epoki) i częstotliwości taktowania. Na przykład zegar może mieć epokę 22 lutego 1996 r. i tykać co sekundę. C++ definiuje trzy typy zegarów:

    zegar_systemowy -Jest to aktualny czas według systemu (zwykły zegar, który widzimy na pasku narzędzi komputera). Jest zapisany jako- std::chrono::system_clock stały_zegar -To monotoniczny zegar, którego nigdy nie można nastawić. Chodzi równomiernie. Jest zapisany jako- std::chrono::steady_clock zegar_wysokiej rozdzielczości - Zapewnia możliwie najkrótszy okres zaznaczenia. Jest zapisany jako-std::chrono::high_registration_clock

Punkt czasowy

Obiekt time_point wyraża punkt w czasie względem epoki zegara. Wewnętrznie obiekt przechowuje obiekt typu Duration i używa typu Clock jako odniesienia dla swojej epoki.  

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  ;;   }   

Wyjście:

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

Należy pamiętać, że precyzja i dokładność zegarów oraz czasów trwania zapewnianych przez mogą się różnić w zależności od systemu i platformy. Zawsze warto sprawdzić dokumentację swojej platformy, aby uzyskać więcej informacji.

Utwórz quiz