Поле | Значение и смысл |
---|---|
Идентификатор соединения (connection ID), по каналу которого которому будет передан импульс. | |
32-разрядное значение (данные импульса — см. параграф «Что внутри импульса?», глава «Обмен сообщениями» — | |
8-разрядное значение (код импульса — см. параграф «Что внутри импульса?», глава «Обмен сообщениями» — | |
Приоритет доставки импульса. Нулевое значение не допускается — слишком уж много людей пострадало от переключения на нулевой приоритет после получения импульса, а поскольку на этом приоритете приходится конкурировать за процессор со спецпроцессом IDLE, много процессорного времени там точно не светит :-). |
Отметим, что
Чтобы передать сигнал, укажите в поле sigev_notify
одно из нижеперечисленных значений:
SIGEV_SIGNAL
Процессу будет передан обычный сигнал.
SIGEV_SIGNAL_CODE
Процессу будет передан сигнал, содержащий 8-битный код.
SIGEV_SIGNAL_THREAD
Сигнал, содержащий 8-битный код, будет передан определенному потоку.
При выборе уведомления типа SIGEV_SIGNAL* нужно будет заполнить ряд дополнительных полей:
Поле | Значение и смысл |
---|---|
Номер сигнала для передачи (берется из , например, SIGALRM). | |
8-разрядный код (для уведомления типа SIGEV_SIGNAL_CODE или SIGEV_SIGNAL_THREAD). |
Для создания потока по срабатыванию таймера установите поле
Поле | Значение и смысл |
---|---|
Адрес функции, возвращающей void* и принимающей void* , которая будет вызвана при возникновении события. | |
Значение, которое будет передано функции | |
Атрибутная запись потока (см. главу «Процессы и потоки», параграф «Атрибутная запись потока»). |
Этот тип уведомления воистину страшен. Если ваш таймер будет срабатывать слишком часто, и при этом будут готовы к выполнению потоки с более высоким приоритетом, чем вновь создаваемые, то у вас быстро вырастет огромная куча заблокированных потоков, и они съедят все ресурсы вашей машины. Пользуйтесь этим типом уведомления с осторожностью!
В файле
есть ряд удобных макросов упрощения заполнения полей в структурах:
Установите
Установите поле
Установите
Установите eventp в SIGEV_SIGNAL_PULSE, укажите идентификатор соединения в