[ Home | Alpha index | Topic index | Tutorials | Download | Feedback ]

The OS/2 API Project

DosWaitMuxWaitSem

[ Syntax | Params | Returns | Include | Usage | Structs | Gotchas | Code | Also ]

Syntax

rc = DosWaitMuxWaitSem( hmuxSemaphore, ulTimeOut, pulUserField );

Parameters

HEV hevSemaphore (input)
The handle of the semaphore to block on.

ULONG ulTimeout (input)
The number of milliseconds the function will wait before returning.
PULONG pulUserField (output)
A pointer to a ULONG that will contain the value of the user field from the SEMRECORD structure. If the MuxWait semaphore was created with the DCMW_WAIT_ALL flag, this will contain the user field of the last semaphore that was posted or released. If the MuxWait semaphore was created with the DCMW_WAIT_ANY flag, this will contain the user field of the semaphore that was posted or released. If the thread did not block, this will contain the user field of the last semaphore in the MuxWait list.

Returns

APIRET rc
The following values can be returned
0NO_ERROROperation successful
6ERROR_INVALID_HANDLEError, The value in phmuxSemaphore does not point to a valid semaphore
8ERROR_NOT_ENOUGH_MEMORYError, The system memory limit has been exceeded
87ERROR_INVALID_PARAMETERError, One or more parameters is not recognized, See parameters above, Both pszSemaphoreName and phmuxSemaphore may be NULL
95ERROR_INTERRUPTError, The thread has become unblocked by an external event such as an exception
103ERROR_TOO_MANY_SEM_REQUESTSError
105ERROR_SEM_OWNER_DIEDError, The owner of a mutex semaphore in the muxwait list has died without freeing the semaphore
286ERROR_EMPTY_MUXWAITError, The MuxWait semaphore hmuxSemaphore is empty
287ERROR_MUTEX_OWNEDError, A mutex semaphore in the muxwait list is currently owned
292ERROR_WRONG_TYPEError
640ERROR_TIMEOUTError, The caller was blocked for ulTimeout milliseconds but ownership of the semaphore could not be obtained within this time limit, Time has expired

Include Info

#define INCL_DOSSEMAPHORES
#include <os2.h>

Usage Explanation

DosWaitMuxWaitSem blocks until the specified muxwait semaphore clears.

MuxWait semaphores are edge triggered. This means that if a muxwait semaphore consists of a number of event semaphores and all have posted except for one, if one of the semaphores resets before the last hold-out posts then it will need to wait for the reset semaphore to post again.

If the MuxWait semaphore consists of mutex semaphores and was created with the DCMW_WAIT_ALL attribute, the process obtains ownership of all mutex semaphores only when all semaphores have been released. If the MuxWait semaphore was created with the DCMW_WAIT_ANY attribute, the process obtains ownership of the first mutex semaphore to release.

Relevant Structures

Gotchas

The process calling DosWaitMuxWaitSem must first obtain access to the semaphore in question or ERROR_INVALID_HANDLE will be returned.

If the thread to be blocked, waiting on an event semaphore, is a PM thread, WinWaitMuxWaitSem should be used instead of DosWaitMuxWaitSem. This will allow the message queue thread to continue processing.

Sample Code

#define INCL_DOSSEMAPHORES #include <os2.h> HMUX hmuxMySemaphore; /* MySemaphore handle */ ULONG TimeOut= -1; /* the number of milliseconds the */ /* the caller will block for the sem */ /* this example will block forever */ ULONG ulUserField; /* to be filled with useful info */ /* access is gained to the semaphore in question */ /* either by DosCreateEventSem ... */ /* ... or by DosOpenEventSem */ /* its handle is placed in hevMySemaphore */ rc = DosWaitMuxWaitSem(hevMySemaphore, TimeOut,&ulUserField); if (rc != 0) { /* We got an error to take care of. */ }

See Also

DosAddMuxWaitSem, DosCloseMuxWaitSem, DosCreateMuxWaitSem DosDeleteMuxWaitSem, DosOpenMuxWaitSem, DosQueryMuxWaitSem, WinWaitMuxWaitSem

Author

Joe Phillips - jaiger@eng2.uconn.edu

Additions

Last modified July 21/1996
Please send all errors, comments, and suggestions to: timur@vnet.ibm.com

The OS/2 API Project

DosWaitMuxWaitSem