Приостановить работу потока на заданное время с высокой точностью
#include <time.h>int clock_nanosleep( clockid_t clock_id,int flags,const struct timespec *rqtp,struct timespec *rmtp );
CLOCK_SOFTTIME
для сна, не "разбудит" процессор, когда приложение должно проснуться. Это позволит процессору перейти в режим энергосбережения. Когда процессор не находится в режиме энергосбережения таймеры типа CLOCK_SOFTTIME
аналогичны типу CLOCK_REALTIME
. TIMER_ABSTIME
- определяет, что время, заданное в параметре rqtp, является абсолютным временем. Текущий поток приостанавливается до тех пор, пока значение времени часов clock_id, не достигнет значения, заданного в параметре rqtp. TIMER_ABSTIME
не установлен, то значение времени, заданное в параметре rqtp является интервалом и текущий поток приостанавливается до тех пор, пока не истечет этот интервал. TIMER_ABSTIME
не установлен и тип clock_id равен CLOCK_REALTIME
, эквивалентен вызову функции nanosleep() с аналогичными параметрами rqtp и rmtp.TIMER_ABSTIME
, это запрашиваемое время до приостановки потока, иначе это интервал времени для сна.NULL
, или указатель на структуру struct timespec, в которой функция может сохранить оставшееся в интервале время. TIMER_ABSTIME
не установлен) и параметр rmtp не равен NULL
, то значение времени в struct timespec обновляется и содержит количество времени, оставшееся в интервале (запрошенное время минус время фактического сна). Если этот указатель равен NULL
, то оставшееся в интервале время не возвращается. TIMER_ABSTIME
установлен), то выполнение функции не влияет на структуру rmtp.libc
Функция clock_nanosleep() приостанавливает выполнение текущего потока до тех пор, пока:
TIMER_ABSTIME
и время часов clock_id достигает абсолютного времени, заданного в параметре rqtp.
TIMER_ABSTIME
и истекает интервал времени, заданный в параметре rqtp.
Функция nanosleep() всегда использует тип часов CLOCK_REALTIME
.
Время приостановки потокак может быть больше запрошенного, поскольку значение времени в параметре округляется до целого числа, кратного разрешению системного времени, или из-за перепланирования и других действий ядра системы.
Кроме случая прерывания потока сигналом, время приостановки будет:
TIMER_ABSTIME
не задан) — не меньше временного интервала, указанного в rqtp, измеряемого соответствующими часами.
TIMER_ABSTIME
задан) — приостановка потока продлится по крайней мере до тех пор, пока значение соответствующих часов не достигнет абсолютного времени, указанного в rqtp (за исключением случая прерывания потока сигналом). Вызов функции clock_nanosleep() не влияет на действие или блокировку любого сигнала.
Ноль, если запрошенное время истекло, или соответствующую ошибку в случаях, если функция clock_nanosleep() была прервана сигналом или завершилась с ошибкой.
1000
миллионов, либо TIMER_ABSTIME
указан в flags, а аргумент rqtp выходит за пределы диапазона для часов типа clock_id, либо параметр clock_id не является поддерживаемым типом часов или указывает. POSIX 1003.1 Clock Selection
clock_settime(), nanosleep(), sleep(), struct timespec
Предыдущий раздел: Описание API системной библиотеки