Jump to content

DosRequestMutexSem: Difference between revisions

From EDM2
Created page with "=== Syntax === rc = DosRequestMutexSem( ''hmtxSemaphore'', ''ulTimeOut'' ); === Parameters === HMTX ''hmtxSemaphore'' (input) The handle of the..."
 
Line 96: Line 96:
</pre>  
</pre>  
=== See Also ===
=== See Also ===
[[OS2 API:CPI:DosCloseMutexSem|CPI:DosCloseMutexSem]],
[[OS2 API:CPI:DosCloseMutexSem|DosCloseMutexSem]],
[[OS2 API:CPI:DosCreateMutexSem|CPI:DosCreateMutexSem]],
[[OS2 API:CPI:DosCreateMutexSem|DosCreateMutexSem]],
[[OS2 API:CPI:DosOpenMutexSem|CPI:DosOpenMutexSem]],
[[OS2 API:CPI:DosOpenMutexSem|DosOpenMutexSem]],
[[OS2 API:CPI:DosQueryMutexSem|CPI:DosQueryMutexSem]],
[[OS2 API:CPI:DosQueryMutexSem|DosQueryMutexSem]],
[[OS2 API:CPI:DosReleaseMutexSem|CPI:DosReleaseMutexSem]]  
[[OS2 API:CPI:DosReleaseMutexSem|DosReleaseMutexSem]]  


[[Category:The OS/2 API Project]]
[[Category:The OS/2 API Project]]

Revision as of 05:12, 17 May 2016

Syntax

rc = DosRequestMutexSem( hmtxSemaphore, 
                         ulTimeOut );


Parameters

HMTX hmtxSemaphore (input)

The handle of the semaphore to be released.

ULONG ulTimeout (input)

The number of milliseconds the function will wait before returning.

  • Set to SEM_IMMEDIATE_RETURN (0), the function will return immediately regardless of whether or not the semaphore is free.
  • Set to SEM_INDEFINITE_WAIT (-1), the function will block indefinitely (forever) until the semaphore becomes free and ownership is obtained.


Returns

 APIRET rc

The following values can be returned

0 NO_ERROR Successfully obtained semaphore ownership
6 ERROR_INVALID_HANDLE Error, The value in phmtxSemaphore does not point to a valid semaphore, The calling process must first have access to the semaphore in question
95 ERROR_INTERRUPT Error, The thread has become unblocked by an external event such as an exception, ownership has not been obtained
103 ERROR_TOO_MANY_SEM_REQUESTS Error, The semaphore usage count system limit, of 65535, has been exceeded
105 ERROR_SEM_OWNER_DIED Error, The semaphore owner has died without releasing the semaphore
640 ERROR_TIMEOUT Error, 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

DosRequestMutexSem blocks until ownership of a mutex semaphore may be obtained. Ownership of a semaphore with multiple threads requesting it is granted to the thread with the highest priority. Among threads with the same priority, ownership is granted in a First-In-First-Out (FIFO) manner.


Relevant Structures

Gotchas

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


Sample Code

#define INCL_DOSSEMAPHORES
#include 

HMTX  hmtxMySemaphore;     /* MySemaphore handle */
ULONG TimeOut= -1;         /* the number of milliseconds the */
                           /* the caller will block for the sem */
                           /* this example will block forever */

	/* access is gained to the semaphore in question */
	/* either by DosCreateMutexSem ... */
	/* ... or by DosOpenMutexSem */
	/* its handle is placed in hmtxMySemaphore */

	rc = DosRequestMutexSem(hmtxMySemaphore, TimeOut);

	if (rc != 0)
	{
	  /* We got an error to take care of. */
	}

See Also

DosCloseMutexSem, DosCreateMutexSem, DosOpenMutexSem, DosQueryMutexSem, DosReleaseMutexSem