Chrono w C++
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.
Dodatkowo
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:
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
Utwórz quiz