Книга: Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Тайм-ауты ядра
QNX/Neutrino позволяет вам получать тайм-ауты по всем блокированным состояниям. Мы обсуждали эти состояния в главе «Процессы и потоки» в разделе «Состояния потоков». Наиболее часто у вас может возникнуть потребность в этом при обмене сообщениями: клиент, посылая сообщение серверу, не желает ждать ответа «вечно». В этом случае было бы удобно использовать тайм-аут ядра. Тайм-ауты ядра также полезны в сочетании с функцией pthread_join(): завершения потока тоже не всегда хочется долго ждать.
Ниже приводится декларация для функции TimerTimeout(), которая является системным вызовом, ответственным за формирование тайм-аутов ядра.
#include <sys/neutrino.h>
int TimerTimeout(clockid_t id, int flags,
const struct sigevent *notify,
const uint64_t *ntime, uint64_t *otime);
Видно, что функция TimerTimeout() возвращает целое число (индикатор удачи/неудачи; 0 означает, что все в порядке, -1 — что произошла ошибка, и ее код записан в errno). Источник синхроимпульсов (CLOCK_REALTIME, и т.п.) указывается в id, параметр flags задает соответствующее состояние (или состояния). Параметр notify всегда должен быть событием уведомления типа SIGEV_UNBLOCK; параметр ntime указывает относительное время, спустя которое ядро должно сгенерировать тайм-аут. Параметр otime показывает предыдущее значение тайм-аута и в большинстве случаев не используется (вы можете передать вместо него NULL).
- 10.11.1 Тайм-аут
- Тайм-ауты ядра и функция pthread_join()
- Глава 3 Часы, таймеры и периодические уведомления
- 1.1 Режимы ядра и пользователя Windows
- Формула времени. Тайм-менеджмент на Outlook 2013
- 4.1. Суть обзора задач в тайм-менеджменте. Основные понятия и определения
- 3.8. Обновление ядра
- 3.8.2. Обновление ядра из RPM-пакета
- 3.8.3. Компиляция ядра
- 14.1.8. Патчинг ядра
- 14.11.1. Параметры ядра
- Регистр масок таймера 1