Using the monotonic clock

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 valid after reboots—for example, serialized into a file or saved into a database. Also, the steady clock should not be used for any time calculations involving time from different sources, such as remote systems or peripheral devices.

In this recipe, we will learn how to use the steady clock to implement a simple software watchdog. When running a background worker thread, it is important to know if it works correctly or hangs because of a coding error or an unresponsive peripheral device. The thread periodically updates a timestamp, while a monitoring routine compares the timestamp with the current time, and, if the threshold is exceeded, performs a certain recovery action.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.117.227.194