Заблокировать в ожидании сообщения
#include <sys/iofunc.h>#include <sys/dispatch.h>resmgr_context_t * resmgr_block( resmgr_context_t *ctp );
libc
Функция resmgr_block() ожидает сообщения (созданного при помощи вызова resmgr_context_alloc()) для контекста ctp.
![]() | Данная функция является частным случаем dispatch_block(), ее следует использовать только при написании простого менеджера ресурсов. Если требуется прикрепить импульсы или другие сообщения, необходимо использовать dispatch_block(). |
Тот же указатель, что и ctp.
Если возникла ошибка функция возвращает NULL
, код ошибки записывается в errno.
EFAULT
, а MsgReceivev() не разблокируется. #include <sys/dispatch.h>#include <stdio.h>#include <stdlib.h>int main( int argc, char **argv ){dispatch_t *dpp;resmgr_context_t *ctp;if ( (dpp = dispatch_create()) == NULL ){fprintf( stderr, "%s: Unable to allocate dispatch handle.\n", argv[0] );return (EXIT_FAILURE);}...ctp = resmgr_context_alloc( dpp );while ( 1 ){if ( ( ctp = resmgr_block( ctp )) == NULL ){fprintf( stderr, "block error\n" );return (EXIT_FAILURE);}resmgr_handler( ctp );}}
Другие примеры, использующие интерфейс диспетчера см. на страницах dispatch_create(), message_attach(), resmgr_attach(), и thread_pool_create().
ЗОСРВ «Нейтрино»
Следует использовать resmgr_block() только в простейших менеджерах ресурсов, и когда не используются message_attach(), pulse_attach(), или select_attach().
dispatch_block(), MsgReceivev(), resmgr_attach(), resmgr_context_alloc(), resmgr_context_t, resmgr_handler()
Предыдущий раздел: Описание API системной библиотеки