Crée ou ouvre un objet sémaphore nommé ou non
#include <WinAPIProc.au3>
_WinAPI_CreateSemaphore ( $sSemaphore, $iInitial, $iMaximum [, $tSecurity = 0] )
$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. |
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. |
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é.
_WinAPI_CloseHandle, _WinAPI_ReleaseSemaphore
Consultez CreateSemaphore dans la librairie MSDN.
#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