TimerAlarm(), TimerAlarm_r()

Отправить сигнал оповещения (alarm)

Прототип:

#include <sys/neutrino.h>
int TimerAlarm( clockid_t id,
const struct _itimer *itime,
struct _itimer *otime );
int TimerAlarm_r( clockid_t id,
const struct _itimer *itime,
struct _itimer *otime );

Аргументы:

id
Тип часов, который будет использоваться для таймера:
CLOCK_REALTIME
стандартные часы, определенные в POSIX. Основанные на этих часах таймеры, разбудят процессор, если он находится в режиме энергосбережения.
CLOCK_SOFTTIME
эти часы активны, когда процессор не находится в режиме энергосбережения. Например, приложение, использующее таймер на базе CLOCK_SOFTTIME для сна, не "разбудит" процессор, когда приложение должно проснуться. Это позволит процессору перейти в режим энергосбережения. Когда процессор не находится в режиме энергосбережения таймеры типа CLOCK_SOFTTIME аналогичны типу CLOCK_REALTIME.
CLOCK_MONOTONIC
эти часы всегда увеличиваются с постоянной скоростью и не могут быть отрегулированы.
itime
NULL, или указатель на структуру struct _itimer, определяющую время ожидания.
otime
NULL, или указатель на структуру struct _itimer, в которой функция сохранит предыдущее время срабатывания таймера.

Библиотека:

libc

Описание:

Данные системные вызовы устанавливают сигнал оповещения (SIGALRM), который будет доставлен ожидающему по таймеру потоку во время, указанное в itime. Если параметр otime не равен NULL, то в него будет записано предыдущее время срабатывания таймера.

Функции TimerAlarm() и TimerAlarm_r() идентичны за исключением того, как они указывают на ошибки.


Note: Рекомендуется вместо непосредственного использования системных вызовов, использовать функции alarm() или setitimer().

Из-за особенностей измерения времени таймер фактически может сработать после истечения указанного в функции времени.


Запросы на оповещение не накапливаются и только один сигнал SIGALRM будет направлен по срабатыванию таймера. Если вызов TimerAlarm() произошел во время ожидания оповещения, таймер сбрасывается до нового значения, указанного в itime.

Если параметр itime равен NULL, то любой запрос на оповещение отменится, а новый сигнал не установится.

Состояния блокировки:

Данные вызовы являются неблокируемыми.

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

TimerAlarm()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
TimerAlarm_r()
EOK возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

EAGAIN
Все ресурсы ядра для таймеров использованы.
EINVAL
Некорректное значение id.

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

ЗОСРВ «Нейтрино»

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

Предостережения:

Функции alarm(), TimerAlarm(), и ualarm() не накапливают запросы на оповещение. С помощью этих функций можно запланировать генерацию только одного сигнала SIGALRM. Если сигнал SIGALRM не был сгенерирован, то следующие вызовы l{alarm()}, TimerAlarm(), и ualarm() его перепланируют.

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

struct _itimer, alarm(), setitimer(), TimerCreate(), ualarm()




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