![]() |
![]() |
![]() |
![]() |
![]() |
This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs. |
Allocate a dispatch handle
#include <sys/iofunc.h> #include <sys/dispatch.h> dispatch_t *dispatch_create( void );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The dispatch_create() function allocates and initializes a dispatch handle. The attach functions are:
If you wish, you can do a resmgr_attach() with a NULL path. This has the effect of initializing dispatch to receive messages and creates the channel among other things.
![]() |
A channel is created only when you first attach something that requires a channel (indicating you will block receiving messages). |
This function is part of the dispatch layer of a resource manager. For more information, see "Components of a resource manager" in the Writing a Resource Manager chapter of the Neutrino Programmer's Guide.
A handle to a dispatch structure, or NULL if an error occurs.
![]() |
The dispatch structure, dispatch_t, is an opaque data type; you can't access its contents directly. |
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <fcntl.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
int my_func( select_context_t *ctp, int fd,
unsigned flags, void *handle ) {
int i, c;
/* Do some useful stuff with data */
i = read( fd, &c, 1 );
fprintf( stderr, "activity on fd %d: read char %c,
return code %d\n", fd, c, i );
}
int main( int argc, char **argv ) {
dispatch_t *dpp;
dispatch_context_t *ctp;
select_attr_t attr;
int fd, fd2;
if( ( dpp = dispatch_create() ) == NULL ) {
fprintf( stderr, "%s: Unable to allocate \
dispatch handle.\n",argv[0] );
return EXIT_FAILURE;
}
if( argc <= 2 || (fd = open( argv[1],
O_RDWR | O_NONBLOCK )) == -1 ) {
return EXIT_FAILURE;
}
if( argc <= 2 || (fd2 = open( argv[2],
O_RDWR | O_NONBLOCK )) == -1 ) {
return EXIT_FAILURE;
}
select_attach( dpp, &attr, fd,
SELECT_FLAG_READ | SELECT_FLAG_REARM, my_func, NULL );
select_attach( dpp, &attr, fd2,
SELECT_FLAG_READ | SELECT_FLAG_REARM, my_func, NULL );
ctp = dispatch_context_alloc( dpp );
for(;;) {
if( ctp = dispatch_block( ctp ) ) {
dispatch_handler( ctp );
}
}
return EXIT_SUCCESS;
}
For more examples using the dispatch interface, see message_attach(), resmgr_attach(), and thread_pool_create().
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | No |
| Thread | Yes |
dispatch_block(), dispatch_context_alloc(), dispatch_destroy(), dispatch_handler(), dispatch_timeout(), dispatch_unblock() message_attach(), pulse_attach(), resmgr_attach(), select_attach()
"Components of a resource manager" in the Writing a Resource Manager chapter of the Neutrino Programmer's Guide
![]() |
![]() |
![]() |
![]() |