TimerSettime(), TimerSettime_r()

Установить время срабатывания таймера

Прототип:

#include <sys/neutrino.h>
int TimerSettime( timer_t id,
int flags,
const struct _itimer *itime,
struct _itimer *oitime );
int TimerSettime_r( timer_t id,
int flags,
const struct _itimer *itime,
struct _itimer *oitime );

Аргументы:

id
Идентификатор таймера, возвращенный функцией TimerCreate(), для которого необходимо установить время срабатывания.
flags
Поддерживается только флаг TIMER_ABSTIME. Если этот флаг установлен, то в параметре nsec задается "абсолютное" время срабатывания таймера в наносекундах, начиная от т.н. эпохи Unix (00:00:00 1-го января 1970 года по UTC). Если указанное время уже истекло, то событие срабатывания доставляется немедленно. Если этот флаг не указан, то время срабатывания является "относительным", т.е. смещенным в наносекундах относительно текущего значения системного времени.
itime
Указатель на структуру struct _itimer, содержащую время срабатывания.
oitime
NULL, или указатель на структуру struct _itimer, в которой функция сохранит предыдущий период интервального таймера, или 0, если таймер был выключен во время вызова). Предыдущий период таймера также будет сохранен в элементе interval_nsec.

Библиотека:

libc

Описание:

Системные вызовы TimerSettime() и TimerSettime_r() устанавливают время срабатывания таймера с идентификатором id.

Данные функции идентичны за исключением способа возврата ошибок.


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

Время срабатывания

Время срабатывания задается в параметре itime. Если значение элемента nsec в структуре itime равно 0, то таймер выключается.

В случае, если значение элемента interval_nsec в структуре itime не равно 0, то это значение определяет период повторных срабатываний таймера после первого срабатывания через время nsec. Таким образом таймер будет автоматически "перезаряжаться" и станет срабатывать с периодом, указанным interval_nsec.

В случае, если таймер был уже запущен во время вызова TimerSettime(), то предыдущие настройки таймера будут сброшены и применены новые.

В случае, если событие уведомления, определенное при вызове функции TimerCreate(), имело значение SI_TIMER в поле sigev_code, то только одно событие уведомления будет поставлено в очередь. В этом случае, если событие ожидалось для предыдущего срабатывания, то, когда таймер сработает снова, произойдет переполнение таймера. С помощью системного вызова TimerInfo() можно получить значение счетчика таких переполнений.


Note: В связи с особенностями измерения таймер может сработать ранее заданного времени.

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

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

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

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

Коды ошибок:

EINVAL
Таймера с идентификатором id не существует.
EFAULT
Возникла ошибка, когда ядро получало доступ к буферам itime или oitime.

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

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

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

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

struct _itimer, timer_t, timer_gettime(), timer_settime(), TimerCreate(), TimerInfo()




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