Suspend a thread until a timeout or signal occurs
Synopsis:
#include <time.h>
int nanosleep( const struct timespec* rqtp,
struct timespec* rmtp );
Arguments:
- rqtp
- A pointer to a
timespec
structure that specifies the time interval for which you want to suspend
the thread.
- rmtp
- NULL, or a pointer to a timespec structure
where the function can store the amount of time remaining in the interval
(the requested time minus the time actually slept).
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
The nanosleep() function causes the calling thread to be
suspended from execution until either:
- The time interval specified by the rqtp argument has elapsed
Or:
- A signal is delivered to the thread, and the signal's action
is to invoke a signal-catching function or terminate the process.
At the end of the suspension, the thread becomes READY and is scheduled to run as normal, based on priority
and the scheduling algorithm.
The nanosleep() function uses CLOCK_REALTIME;
clock_nanosleep()
is similar, but you can choose which clock to use, and you can specify a relative or absolute time.
Note:
This function can interfere with the kernel's efforts to manage power usage.
The suspension time may be longer than requested because the argument
value is rounded up to be a multiple of the system timer resolution
(see the
Tick, Tock: Understanding the Microkernel's Concept of Time
chapter of the
QNX Neutrino Programmer's Guide) or
because of scheduling and other system activity.
Returns:
- 0
- The requested time has elapsed.
- -1
- The nanosleep() function was interrupted by a signal
(errno
is set).
Errors:
- EAGAIN
- All timers are in use. You'll have to wait for a process to release one.
- EFAULT
- A fault occurred trying to access the buffers provided.
- EINTR
- The nanosleep() function was interrupted by a signal.
- EINVAL
- The number of nanoseconds specified by the tv_nsec member
of the timespec
structure pointed to by rqtp is less than zero or greater
than or equal to 1000 million.
Classification:
POSIX 1003.1
Safety: |
|
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
No |
Thread |
Yes |