The C++ Chrono library provides three types of clocks:
- System clock
- Steady clock
- High-resolution clock
The high-resolution clock is often implemented as an alias of the system clock or the steady clock. The system clock and the steady clock, however, are quite different.
The system clock reflects the system time and hence is not monotonic. It can be adjusted at any time by time synchronization services such as Network Time Protocol (NTP), and, as a result, can even go backward.
This makes the system clock a poor choice for dealing with precise durations. The steady clock is monotonic; it is never adjusted and never goes backward. This property has its cost—it is not related to wall clock time and is usually represented as the time since the last reboot.
The steady clock should not be used for persistent timestamps that need to remain...