[Previous] [Contents] [Next]

clock_nanosleep()

High resolution sleep with specifiable clock

Synopsis:

#include <time.h>

int clock_nanosleep( clockid_t clock_id,
                     int flags,
                     const struct timespec * rqtp,
                     struct timespec * rmtp );

Library:

libc

Description:

The clock_nanosleep() function suspends the current thread from execution until:

where:

clock_id
Specifies the clock that's used to measure the time. The possible clock types are:
CLOCK_MONOTONIC
A clock that always increases at a constant rate and can't be adjusted.
CLOCK_SOFTTIME
Same as CLOCK_REALTIME, but if the CPU is in powerdown mode, the clock stops running.
CLOCK_REALTIME
A clock that maintains the system time.
flags
Specifies when the current thread is to be suspended from execution:

Calling clock_nanosleep() with TIMER_ABSTIME not set and clock_id set to CLOCK_REALTIME is the equivalent to calling nanosleep() with the same rqtp and rmtp arguments.

rqtp
Specifies the time interval between the requested time and the time actually slept.
rmtp
The amount of time remaining in an interval.

For the relative clock_nanosleep() function, if rmtp isn't NULL, the timespec structure referenced by it is updated to contain the amount of time remaining in the interval (the requested time minus the time actually slept). If it's NULL, the remaining time isn't returned. The absolute clock_nanosleep() function has no effect on the structure referenced by rmtp.

The nanosleep() function always uses CLOCK_REALTIME.

The suspension time may be longer than requested because the argument value is rounded up to an integer multiple of the sleep resolution, or because of scheduling and other system activity. Except for the case of being interrupted by a signal, the suspension time for:

The use of the clock_nanosleep() function has no effect on the action or blockage of any signal.

The clock_nanosleep() function fails if the clock_id argument refers to the CPU-time clock of the calling thread. It's unspecified if clock_id values of other CPU-time clocks are allowed.

Returns:

Zero if the requested time has elapsed, or a corresponding error value if clock_nanosleep() has been interrupted by a signal, or fails.

Errors:

EINTR
The call was interrupted by a signal.
EINVAL
The rqtp argument specified a nanosecond value less than zero or greater than or equal to 1000 million; or TIMER_ABSTIME is specified in flags and the rqtp argument is outside the range for the clock specified by clock_id; or the clock_id argument doesn't specify a known clock, or specifies the CPU-time clock of the calling thread.
ENOTSUP
The clock_id argument specifies a clock for which clock_nanosleep() isn't supported, such as a CPU-time clock.

Classification:

POSIX 1003.1j (draft)

Safety:
Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

clock_settime(), nanosleep(), sleep()


[Previous] [Contents] [Next]