NAME
usleep — suspend
execution for an interval
SYNOPSIS
int usleep(useconds_t useconds);
DESCRIPTION
The usleep () function shall cause the
calling thread to be suspended from execution until either the number of
realtime microseconds specified by the argument useconds
has elapsed or a signal is delivered to the calling thread and its action is
to invoke a signal-catching function or to terminate the process. The
suspension time may be longer than requested due to the scheduling of other
activity by the system.
The useconds argument shall be less than one million. If the value of useconds is 0, then the call has no effect.
If a SIGALRM signal is generated for the calling process during
execution of usleep () and if the SIGALRM signal is
being ignored or blocked from delivery, it is unspecified whether
usleep () returns when the SIGALRM signal is
scheduled. If the signal is being blocked, it is also unspecified whether it
remains pending after usleep () returns or it is
discarded.
If a SIGALRM signal is generated for the calling process during
execution of usleep (), except as a result of a
prior call to alarm(3), and if the SIGALRM signal is not
being ignored or blocked from delivery, it is unspecified whether that
signal has any effect other than causing usleep ()
to return.
If a signal-catching function interrupts
usleep () and examines or changes either the time a
SIGALRM is scheduled to be generated, the action associated with the SIGALRM
signal, or whether the SIGALRM signal is blocked from delivery, the results
are unspecified.
If a signal-catching function interrupts
usleep () and calls siglongjmp(3)
or longjmp(3) to restore an environment saved prior to the
usleep () call, the action associated with the
SIGALRM signal and the time at which a SIGALRM signal is scheduled to be
generated are unspecified. It is also unspecified whether the SIGALRM signal
is blocked, unless the thread's signal mask is restored as part of the
environment.
Implementations may place limitations on the granularity of timer values. For each interval timer, if the requested timer value requires a finer granularity than the implementation supports, the actual timer value shall be rounded up to the next supported value.
Interactions between usleep () and any of
the following are unspecified:
nanosleep() setitimer() timer_create() timer_delete() timer_getoverrun() timer_gettime() timer_settime() ualarm() sleep()
The usleep () function need not be
reentrant. A function that is not required to be reentrant is not required
to be thread-safe.
RETURN VALUE
Upon successful completion, usleep ()
shall return 0; otherwise, it shall return -1 and set
errno to
indicate the error.
ERRORS
The usleep () function may fail if:
- [EINVAL]
- The time interval specified one million or more microseconds.
EXAMPLES
None.
APPLICATION USAGE
Applications are recommended to use nanosleep(3) if the Timers option is supported, or setitimer(3), timer_create(3), timer_delete(3), timer_getoverrun(3), timer_gettime(3), or timer_settime(3) instead of this function.
RATIONALE
None.
FUTURE DIRECTIONS
None.
SEE ALSO
alarm(3), getitimer(3), nanosleep(3), sigaction(3), sleep(3) , timer_create(3), timer_delete(3), timer_getoverrun(3), the Base Definitions volume of IEEE Std 1003.1-2001 (“POSIX.1”), <unistd.h>
CHANGE HISTORY
First released in Issue 4, Version 2.
Issue 5
Moved from X/OPEN UNIX extension to BASE.
The DESCRIPTION is changed to indicate that timers are now thread-based rather than process-based.
Issue 6
The DESCRIPTION is updated to avoid use of the term "must" for application requirements.
This function is marked obsolescent.
IEEE Std 1003.1-2001
(“POSIX.1”)/Cor 2-2004, item XSH/TC2/D6/144 is applied,
updating the DESCRIPTION from "process' signal mask" to
"thread's signal mask", and adding a statement that the
usleep () function need not be reentrant.
End of informative text. footer end