# ctaCreateQueue

Creates an event queue and returns a queue handle.

#### Prototype

DWORD ctaCreateQueue ( char *mgrlist[], unsigned nmgrs, CTAQUEUEHD *ctaqueuehd)

Argument | Description
mgrlist | Pointer to a list of service managers to attach to the queue. The name of each service manager must match one of the names specified with ctaInitialize.
nmgrs | Number of service managers in mgrlist.
ctaqueuehd | Pointer to a returned queue handle.

#### Return values

Return value | Description
SUCCESS |
CTAERR_ALREADY_DEFINED | There is a duplicate service manager in mgrlist.
CTAERR_BAD_ARGUMENT | ctaqueuehd is invalid or NULL.
CTAERR_NOT_FOUND | One or more of the service managers in mgrlist is not found.
CTAERR_NOT_INITIALIZED | Natural Access is not initialized. Call ctaInitialize first.
CTAERR_DRIVER_OPEN_FAILED | The ADI service driver open failed.

A service-manager-specific error, such as:

Return value | Description
CTAERR_DRIVER_OPEN_FAILED | The ADI service driver open failed.

#### Details

ctaCreateQueue creates an event queue and returns a handle (ctaqueuehd) used to reference the queue. When the application creates a context, the context is associated with this queue.

If mgrlist is NULL, all service managers registered with ctaInitialize are attached to the queue.

Use ctaWaitEvent to retrieve events. After creating the event queue, applications that are managing wait objects must set the CTA_NOTIFY_UPDATE_WAITOBJS flag in the ctaflags field of the CTA_INIT_PARMS structure in ctaInitialize. Call ctaQueryWaitObjects after calling ctaCreateQueue.

Refer to Creating event queues for more information.

Note: When running on a local or a remote server, cta.cfg must contain a list of all service and service manager pairs expected to be used by any application. Otherwise, ctaOpenServices or ctaInitialize return CTAERR_NOT_FOUND.

#### See also

ctaDestroyQueue

#### Example

DEMOCONTEXT *Cxarray[100];
/* Setup a queue and multiple contexts for a state machine demo. */
void DemoSetup(CTAQUEUEHD *ctaqueuehd)
{
unsigned i;
char *mgrlist[] = { "ADIMGR", "VCEMGR", "SWIMGR" };
/* Create the Natural Access application queue and attach specified managers */
ctaCreateQueue( mgrlist,
sizeof(mgrlist)/sizeof(mgrlist[0]),
ctaqueuehd);
for (i=0; i < 100; i++)
{
char cxname[12];
DEMOCONTEXT *cx = (DEMOCONTEXT *) malloc ( sizeof(DEMOCONTEXT) );
cx->line = i;
cx->ctaqueuehd = *ctaqueuehd;
/* Context name will be printed in all trace records for this context */
sprintf( cxname, "DEMOCX%04d", i );
/* Create context with index of demo context as userid */
ctaCreateContext( cx->ctaqueuehd, i, cxname, &(cx->ctahd) );
Cxarray[i] = cx;
}
}