This example creates a muxwait semaphore with two event semaphores in its list, queries the number of entries, and displays it.
#define INCL_DOSSEMAPHORES /* DOS semaphore values */ #define INCL_DOSERRORS /* DOS error values */ #include <os2.h> #include <stdio.h> int main(VOID) { HMUX hmuxHandAny = NULLHANDLE; /* Muxwaithandle */ HEV hev[2] = {0}; /* Event semaphores */ SEMRECORD apsr[2] = {{0}}; /* Semaphore records */ SEMRECORD semrecQuery[2] = {{0}}; /* Pointer from query */ ULONG cQueryRec = 2; /* Number of records found by query */ ULONG fQueryFlags = 0; /* Attribute flags returned by query */ APIRET rc = NO_ERROR; /* Return code */ ULONG ulLoop = 0; /* Loop count */ ULONG ulSem = 0; for (ulLoop = 0; ulLoop < 2; ulLoop++) { rc = DosCreateEventSem((PSZ) NULL, &hev[ulLoop], 0, FALSE); if (rc != NO_ERROR) { printf("DosCreateEventSem error: return code = %u\n", rc); return 1; } apsr[ulLoop].hsemCur = (HSEM) hev[ulLoop], apsr[ulLoop].ulUser = 0; } /* endfor */ rc = DosCreateMuxWaitSem((PSZ) NULL, &hmuxHandAny, 2L, apsr, DCMW_WAIT_ANY); if (rc != NO_ERROR) { printf("DosCreateMuxWaitSem error: return code = %u\n", rc); return 1; } /* Query information about the MuxWait semaphore */ rc = DosQueryMuxWaitSem(hmuxHandAny, /* Semaphore handle */ &cQueryRec, /* Number of records */ (PSEMRECORD) semrecQuery, /* Pointer to Semrecords */ &fQueryFlags); /* Flags returned */ if (rc != NO_ERROR) { printf("DosQueryMuxWaitSem error: return code = %u\n", rc); return 1; } else { printf("DosQueryMuxWaitSem found %u semaphore records\n", cQueryRec); } /* endif */ return NO_ERROR; }