UDF > WinAPIEx > Processes & Synchronization > Synchronization >


_WinAPI_CreateSemaphore

Cr�e ou ouvre un objet s�maphore nomm� ou non

#include <WinAPIProc.au3>
_WinAPI_CreateSemaphore ( $sSemaphore, $iInitial, $iMaximum [, $tSecurity = 0] )

Param�tres

$sSemaphore Le nom du s�maphore � ouvrir. La comparaison des noms est sensible � la casse.
$iInitial Le compteur initial de l'objet Semaphore. Cette valeur doit �tre sup�rieure ou �gale � z�ro et inf�rieure ou �gale � $iMaximum.
$iMaximum Le maximum du compteur de l'objet Semaphore. Cette valeur doit �tre sup�rieure � z�ro.
$tSecurity [optionnel]Une structure $tagSECURITY_ATTRIBUTES qui sp�cifie un descripteur de s�curit� pour le nouveau s�maphore.
Si ce param�tre est 0 (par d�faut), le s�maphore re�oit un descripteur de s�curit� par d�faut.

Valeur de retour

Succ�s: Retourne le handle de l'objet s�maphore nouvellement cr��.
�chec: Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations suppl�mentaires sur l'erreur.

Remarques

Si l'objet Semaphore nomm� existait avant l'appel de la fonction, la fonction retourne le handle de l'objet existant.

Tout processus peut sp�cifier le handle de l'objet Semaphore dans un appel � une fonction _WinAPI_WaitFor.... Les fonctions d'attente pour un seul objet retourne lorsque l'�tat de l'objet sp�cifi� est signal�. Les fonctions d'attente pour de multiples objets peuvent �tre programm�s pour retourner lorsque un ou tous les objets sp�cifi�s sont signal�s. Lorsqu'une fonction d'attente retourne, le processus en attente est lib�r� et peut continuer son ex�cution.

L'�tat d'un objet Semaphore est signal� lorsque son compteur est strictement sup�rieur � z�ro, et non signal� lorsque son compteur est �gal � z�ro.
Le param�tre $iInitial sp�cifie la valeur du compteur initial. 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� de 1.
Utilisez la fonction _WinAPI_ReleaseSemaphore() pour incr�menter le compteur d'un s�maphore d'un montant d�termin�.
Le compte ne peut jamais �tre inf�rieur � z�ro ou sup�rieur � la valeur sp�cifi�e pour le param�tre $iMaximum.

Utilisez la fonction _WinAPI_CloseHandle() pour fermer le handle. Le syst�me ferme le handle automatiquement lorsque le processus se termine. Le s�maphore est d�truit lorsque son dernier handle a �t� ferm�.

En relation

_WinAPI_CloseHandle, _WinAPI_ReleaseSemaphore

Voir aussi

Consultez CreateSemaphore 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