Listing 5: Bare bones version of Retrieve for FIFO
char Retrieve() { char chRetVal ; DWORD dwPrevCount ; static int iRetPos = 0 ; WaitForSingleObject(hOccSem, INFINITE) ; EnterCriticalSection(&cs) ; chRetVal = achTheQueue[iRetPos] ; iRetPos = (++iRetPos % LEN_QUEUE) ; LeaveCriticalSection(&cs) ; ReleaseSemaphore(hFreeSem, 1, &dwPrevCount) ; return chRetVal ; } //End of File