So what does CLOCK_SOFTTIME do?

If we wanted to sort our clock sources by hardness we'd have the following ordering: You can think of CLOCK_MONOTONIC as being a freight train—it doesn't stop for anyone. Next on the list is CLOCK_REALTIME, because it can be pushed around a bit (as we saw with the time adjustment). Finally, we have CLOCK_SOFTTIME, which we can push around a lot.

The main use of CLOCK_SOFTTIME (a QNX Neutrino extension to POSIX) is for things that are soft—things that aren't going to cause a critical failure if they don't get done. CLOCK_SOFTTIME is active only when the CPU is running. (Yes, this does sound obvious :-) but wait!) When the CPU is powered down because power management has detected that nothing is going to happen for a little while, CLOCK_SOFTTIME gets powered down as well!

Here's a timing chart showing the three clock sources:

Real time QNX Neutrino time Activity
11:22:05 11:22:00 Wake up at now + 00:00:30 (see below)
11:22:15 11:22:15 Clock gets adjusted as before
11:22:20 11:22:20 Power management turns off CPU
11:22:30 11:22:30 CLOCK_REALTIME wakes up
11:22:35 11:22:35 CLOCK_MONOTONIC wakes up
11:45:07 11:45:07 Power management turns on CPU, and CLOCK_SOFTTIME wakes up

There are a few things to note here:

  • We precomputed our wakeup time as now plus 30 seconds and used an absolute timer to wake us up at the computed time. This is different from waking up in 30 seconds using a relative timer.
  • Note that for convenience of putting the example on one timeline, we've lied a little bit. If the CLOCK_REALTIME thread did indeed wake up (and later the same for CLOCK_MONOTONIC), it would have caused us to exit out of power-management mode at that time, which would then cause CLOCK_SOFTTIME to wake up.

When CLOCK_SOFTTIME oversleeps, it wakes up as soon as it's able—it doesn't stop timing while the CPU is powered down, it's just not in a position to wake up until after the CPU powers up. Other than that, CLOCK_SOFTTIME is just like CLOCK_REALTIME.

Page updated: