Convenient tool in C ++ 11-chrono Library (processing date and time)
Chrono is the name of a header, but also of a sub-namespace: All the elements in this header (partition t for the common_type specializations) are not defined directly under the std namespace (like most of the standard library) but under the std: chrono namespace.
The elements in this header deal with time. This is done mainly by means of three concepts:
Durations
They measure time spans, like: one minute, two hours, or ten milliseconds.
In this library, they are represented with objects of the duration class template, that couples a count representation and a period precision (e.g ., ten milliseconds has ten as count representation and milliseconds as period precision ).
Time points
A reference to a specific point in time, like one's birthday, today's dawn, or when the next train passes.
In this library, objects of the time_point class template express this by using a duration relative to an epoch (which is a fixed point in time common to all time_point objects using the same clock ).
Clocks
A framework that relates a time point to real physical time.
The library provides at least three clocks that provide means to express the current time as a time_point: system_clock, steady_clock and high_resolution_clock.
Duration of record duration
Duration indicates a period of time, which is used to record the length of time. It can represent the interval of seconds, minutes, or hours.
Prototype:
template
>class duration;
Purpose:
A duration object expresses a time span by means of a count and a period.
Parameters:
Rep
An arithmetic type, or a class emulating an arithmetic type, to be used as the type for the internal count.
Period
A ratio type that represents the period in seconds.
#include
#include
#include
int main (){ typedef std::chrono::duration
seconds_type; typedef std::chrono::duration
milliseconds_type; typedef std::chrono::duration
> hours_type; hours_type h_oneday (24); // 24h seconds_type s_oneday (60*60*24); // 86400s milliseconds_type ms_oneday (s_oneday); // 86400000ms seconds_type s_onehour (60*60); // 3600s//hours_type h_onehour (s_onehour); // NOT VALID (type truncates), use: hours_type h_onehour (std::chrono::duration_cast
(s_onehour)); milliseconds_type ms_onehour (s_onehour); // 3600000ms (ok, no type truncation) std::cout << ms_onehour.count() << "ms in 1h" << std::endl; return 0;}
Time point of the time point
A time point is a time point used to obtain the duration and current time that has elapsed since the era of its clock.
Prototype:
template
class time_point;
// time_point constructors#include
#include
#include
int main (){ using namespace std::chrono; system_clock::time_point tp_epoch; // epoch value time_point
> tp_seconds (duration
(1)); system_clock::time_point tp (tp_seconds); std::cout << "1 second since system_clock epoch = "; std::cout << tp.time_since_epoch().count(); std::cout << " system_clock periods." << std::endl; // display time_point: std::time_t tt = system_clock::to_time_t(tp); std::cout << "time_point tp is: " << ctime(&tt); return 0;}
Obtain the clock of the system clock.
Clocks indicates the current system clock.
System_clock
Clock classes provide access to the current time_point.
Specifically, system_clock is a system-wide realtime clock.
Steady_clock
Clock classes provide access to the current time_point.
Steady_clock is specifically designed to calculate time intervals.
High_resolution_clock
The members of clock classes provide access to the current time_point.
High_resolution_clock is the clock with the shortest tick period. It may be a synonym for system_clock or steady_clock.
#include
#include
#include
#include
int main (){ using namespace std::chrono; high_resolution_clock::time_point t1 = high_resolution_clock::now(); std::cout << "printing out 1000 stars...\n"; for (int i=0; i<1000; ++i) std::cout << "*"; std::cout << std::endl; high_resolution_clock::time_point t2 = high_resolution_clock::now(); duration
time_span = duration_cast
>(t2 - t1); std::cout << "It took me " << time_span.count() << " seconds."; std::cout << std::endl; return 0;}