#define SRVQUEUENAME = "\\QUEUES\\SRV_QUEUE" /* Server queue name */ #define REQQUEUENAME = "\\QUEUES\\REQ_QUEUE" /* Requester queue name */ HQUEUE hReqQueue, hSrvQueue; /* Queue handles */ REQUESTDATA Server; /* Control information */ REQUEST *Request; /* Request data buffer */ REPLY *Reply; /* Reply data buffer */ BYTE Priority; /* Priority information */ ULONG ulBytes; /* Bytes read/written */ APIRET rc; /* Return code */ case WMP_SENDREQUEST: rc = DosCreateQueue(&hReqQueue, /* Create req queue */ QUE_FIFO | /* First-in, first-out */ QUE_CONVERT_ADDRESS, /* Convert addresses */ REQQUEUENAME); /* Name of queue */ rc = DosOpenQueue(&pidServer, /* Open srv queue */ &hSrvQueue, /* Queue handle */ SRVQUEUENAME); /* Server queue name */ rc = DosAllocSharedMem(&Request, /* Allocate shared mem */ NULL, /* object for request */ sizeof(REQUEST), /* Size of memory object */ PAG_WRITE | /* Allow write access */ PAG_READ | /* Allow read access */ PAG_COMMIT); /* Commit storage now */ rc = DosGiveSharedMem(Request, /* Give mem to server */ pidServer, /* Server process id */ PAG_READ); /* Allow read only */ rc = DosWriteQueue(hSrvQueue, /* Add request to queue */ (ULONG)hWnd, /* Requester win handle */ sizeof(REQUEST), /* Size of request */ Request, /* Request buffer */ 0); /* No priority */ rc = DosCloseQueue(hSrvQueue); /* Close srv queue */ DosFreeMem(Request); /* Free request buffer */ break;
This example shows elements being added to a queue by a "requester" process.