clock_nanosleep()

Приостановить работу потока на заданное время с высокой точностью

Прототип:

#include <time.h>
int clock_nanosleep( clockid_t clock_id,
int flags,
const struct timespec *rqtp,
struct timespec *rmtp );

Аргументы:

clock_id
Тип часов (clock ID), использующихся для измерения времени. Возможные типы:
CLOCK_REALTIME
стандартные часы, определенные в POSIX. Основанные на этих часах таймеры, разбудят процессор, если он находится в режиме энергосбережения.
CLOCK_SOFTTIME
эти часы активны, когда процессор не находится в режиме энергосбережения. Например, приложение, использующее таймер на базе CLOCK_SOFTTIME для сна, не "разбудит" процессор, когда приложение должно проснуться. Это позволит процессору перейти в режим энергосбережения. Когда процессор не находится в режиме энергосбережения таймеры типа CLOCK_SOFTTIME аналогичны типу CLOCK_REALTIME.
CLOCK_MONOTONIC
эти часы всегда увеличиваются с постоянной скоростью и не могут быть отрегулированы.
Функция clock_nanosleep() завершится с ошибкой, если параметр clock_id указывает на неподдерживаемый тип часов.
flags
Флаги, определяющие, когда будет приостановлено выполнение текущего потока. Можно задать единственный флаг: Вызов clock_nanosleep(), если флаг TIMER_ABSTIME не установлен и тип clock_id равен CLOCK_REALTIME, эквивалентен вызову функции nanosleep() с аналогичными параметрами rqtp и rmtp.
rqtp
Указатель на структуру struct timespec, определяющую временной интервал приостановки (сна) потока. Если задан флаг TIMER_ABSTIME, это запрашиваемое время до приостановки потока, иначе это интервал времени для сна.
rmtp
NULL, или указатель на структуру struct timespec, в которой функция может сохранить оставшееся в интервале время.

Если функция clock_nanosleep() является относительной (т.е. флаг TIMER_ABSTIME не установлен) и параметр rmtp не равен NULL, то значение времени в struct timespec обновляется и содержит количество времени, оставшееся в интервале (запрошенное время минус время фактического сна). Если этот указатель равен NULL, то оставшееся в интервале время не возвращается.

Если функция clock_nanosleep() является относительной (т.е. флаг TIMER_ABSTIME установлен), то выполнение функции не влияет на структуру rmtp.

Библиотека:

libc

Описание:

Функция clock_nanosleep() приостанавливает выполнение текущего потока до тех пор, пока:

Функция nanosleep() всегда использует тип часов CLOCK_REALTIME.

Время приостановки потокак может быть больше запрошенного, поскольку значение времени в параметре округляется до целого числа, кратного разрешению системного времени, или из-за перепланирования и других действий ядра системы.

Кроме случая прерывания потока сигналом, время приостановки будет:

Вызов функции clock_nanosleep() не влияет на действие или блокировку любого сигнала.

Возвращаемое значение:

Ноль, если запрошенное время истекло, или соответствующую ошибку в случаях, если функция clock_nanosleep() была прервана сигналом или завершилась с ошибкой.

Коды ошибок:

EINTR
Вызов был прерван сигналом.
EINVAL
Параметр rqtp указывает значение в наносекундах меньше нуля или больше или равно 1000 миллионов, либо TIMER_ABSTIME указан в flags, а аргумент rqtp выходит за пределы диапазона для часов типа clock_id, либо параметр clock_id не является поддерживаемым типом часов или указывает.
ENOTSUP
Параметр clock_id указывает на тип часов, для которых функция clock_nanosleep() не поддерживается, например, часы типа CPU-time.

Классификация:

POSIX 1003.1 Clock Selection

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

clock_settime(), nanosleep(), sleep(), struct timespec




Предыдущий раздел: Описание API системной библиотеки