Задать функцию-обработчик импульса для менеджера ресурсов
#include <sys/iofunc.h>#include <sys/dispatch.h>int pulse_attach( dispatch_t *dpp,int flags,int code,int (*func)( message_context_t *ctp,int code,unsigned flags,void *handle ),void *handle );
<sys/dispatch.h>
: _PULSE_CODE_MINAVAIL
и _PULSE_CODE_MAXAVAIL
. libc
Функция pulse_attach() присоединяет пульс с кодом code к обработчику func. Можно использоваться данный обработчиктакже и в message_attach(). Посредством контроля ctp->rcvid, в обработчике func можно определить что получено – пульс или сообщение.
Если менеджер ресурсов получит пульс с кодом code, будет вызван func. За всю последующую обработку пульса ctp->msg.pulse отвечает исключительно обработчик. Указатель handle передается ему в качестве аргумента. Обработчик должен вернуть 0
; остальные значения зарезервированы.
Обычно pulse_attach() используется для ассоциирования пульсов, генерируемых обработчиками прерываний и таймеров, с некоторым обработчиков в менеджере ресурсов.
Если передан флаг MSG_FLAG_ALLOC_PULSE
, функция возвращает код выделенного системой пульса; в противном случае, возвращается code.
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
#include <sys/dispatch.h>#include <time.h>#include <stdio.h>#include <stdlib.h>int my_func( ... ){...}int main( int argc, char **argv ){dispatch_t *dpp;int flag = 0, code, mycode;if ( ( dpp = dispatch_create() ) == NULL ){fprintf( stderr, "%s: Unable to allocate dispatch handle.\n",argv[0] );return (EXIT_FAILURE);}...mycode = ...;if ( (code = pulse_attach( dpp, flag, mycode, &my_func, NULL )) == -1 ){fprintf( stderr, "Failed to attach code %d.\n", mycode );return (1);}/* else successfully attached a pulse code */...}
Примеры использования интерфейса диспетчера можно найти на страницах dispatch_create(), message_attach(), resmgr_attach() и thread_pool_create().
ЗОСРВ «Нейтрино»
message_context_t, message_attach(), pulse_detach()
Предыдущий раздел: Описание API системной библиотеки