# Function Reference

# _WinAPI_ReleaseSemaphore

Increases the count of the specified semaphore object by a specified amount

#include <WinAPIProc.au3>
_WinAPI_ReleaseSemaphore ( $hSemaphore [, $iIncrease = 1] )

## Parameters

$hSemaphore | Handle to the semaphore object. The _WinAPI_CreateSemaphore() or _WinAPI_OpenSemaphore() function returns this handle.
$iIncrease | [optional] The amount by which the semaphore object's current count is to be increased. The value must be greater than zero. If the specified amount would cause the semaphore's count to exceed the maximum count that was specified when the semaphore was created, the count is not changed and the function returns 0. Default is 1.

## Return Value

Success: | The previous count for the semaphore.
Failure: | Sets the @error flag to non-zero, call _WinAPI_GetLastError() to et extendd error information.

## Remarks

The state of a semaphore object is signaled when its count is greater than zero and nonsignaled when its count
is equal to zero. The process that calls the _WinAPI_CreateSemaphore() function specifies the semaphore's initial
count. Each time a waiting process is released because of the semaphore's signaled state, the count of the
semaphore is decreased by one.

## Related

_WinAPI_CreateSemaphore, _WinAPI_OpenSemaphore

## See Also

Search ReleaseSemaphore in MSDN Library.

## Example

    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>

    If Not @Compiled Then
        MsgBox($MB_SYSTEMMODAL, '', 'To run this script, you must first compile it and then run the (.exe) file.')
        Exit
    EndIf

    Local $hSemaphore = _WinAPI_CreateSemaphore('MySemaphore', 2, 2)

    _WinAPI_WaitForSingleObject($hSemaphore)
    _MyGUI()
    _WinAPI_ReleaseSemaphore($hSemaphore)
    _WinAPI_CloseHandle($hSemaphore)

    Func _MyGUI()
        GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'))
        GUISetState(@SW_SHOW)
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
            EndSwitch
        WEnd
    EndFunc   ;==>_MyGUI