UDF > WinAPIEx > Processes & Synchronization > Synchronization >


_WinAPI_ReleaseSemaphore

Augmente le compteur de l'objet Semaphore spécifié d'une valeur donnée

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

Paramètres

$hSemaphore Handle de l'objet Semaphore. La fonction _WinAPI_CreateSemaphore() or _WinAPI_OpenSemaphore() retourne ce handle.
$iIncrease [optionnel] La valeur par laquelle le compteur actuel de l'objet Semaphore doit être augmentée. La valeur doit être supérieure à zéro. Si la valeur indiquée provoquerait le dépassement du nombre maximum spécifié lors de la création du sémaphore, le compteur ne serait pas modifié et la fonction retournerait 0. La valeur de ce paramètre par défaut est 1.

Valeur de retour

Succès: Retourne la valeur précédente du compteur du sémaphore.
Échec: Définit @error <> 0, appelez _WinAPI_GetLastError() pour obtenir des informations supplémentaires sur l'erreur.

Remarque

L'état d'un objet sémaphore est signalé lorsque son compteur est supérieur à zéro et non signalé quand son compteur est égal à zéro. Le processus qui appelle la fonction _WinAPI_CreateSemaphore() spécifie la valeur initiale du compteur du sémaphore. Chaque fois qu'un processus d'attente est libéré en raison de l'état ​​signalé du sémaphore, le compteur du sémaphore est diminuée de un.

En relation

_WinAPI_CreateSemaphore, _WinAPI_OpenSemaphore

Voir aussi

Consultez ReleaseSemaphore dans la librairie MSDN.

Exemple

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

If Not @Compiled Then
    MsgBox($MB_SYSTEMMODAL, '', 'Pour exéuter ce script, vous devez premièrement le compiler, puis ensuite exécuter le fichier (.exe).')
    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)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_MyGUI