Erzeugt oder öffnet ein benanntes oder unbenanntes Semaphore-Objekt.
#include <WinAPIProc.au3>
_WinAPI_CreateSemaphore ( $sSemaphore, $iInitial, $iMaximum [, $tSecurity = 0] )
$sSemaphore | Der Name des zu öffnenden Semaphores. Die Groß-/ Kleinschreibung wird bei dem Namensvergleich beachtet. |
$iInitial | Der ursprüngliche Zähler des Semaphore-Objektes. Dieser Wert muss größer oder gleich 0 sein oder weniger oder gleich $iMaximum. |
$iMaximum | Das Maximum des Zählers für das Semaphore-Objekt. Dieser Wert muss größer als 0 sein. |
$tSecurity | [optional] Die $tagSECURITY_ATTRIBUTES Struktur welches den Sicherheitsdeskriptor für das neue Semaphore-Objekt angibt. Wenn dieser Parameter 0 ist (Standard), dann erhält das Semaphore-Objekt einen Standardsicherheitsdeskriptor. |
Erfolg: | Das Handle des neu erstellen Semaphore-Objektes. |
Fehler: | 0. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten. |
Wenn das benannte Semaphore-Objekt vor dem Funktionsaufruf existiert, so gibt die Funktion das Handle zum bereits existierenden Objekt zurück.
Jeder Prozess kann das Semaphore-Objekt Handle in einem Aufruf der _WinAPI_WaitFor... Funktionen angeben. Die Einzel-Objekt-Wartefunktionen beenden sich wenn der Status des angegebenen Objektes signalisiert werden. Die Mehrere-Objekt-Wartefunktionen können entweder sich beenden wenn eine oder alle der angegebenen Objekte signalisiertwerden. Wenn eine Wartefunktion sich beednet, so wird der wartende Prozess freigegeben um seine Ausführung fortzusetzen.
Der Status des Semaphore-Objektes wird signalisiert wernn der Zähler größer als 0 oder nicht signalisiert wenn der Zähler gleich 0 ist.
Der $iInitial Parameter gibt den ursprünglichen Zählerwert an. Jedes mal wenn ein wartender Prozess aufgrund eines signalisierten Zustandes eines Semaphores freigegeben wird, wird der Zähler des Semaphore-Objektes um eins verringert.
Mit der _WinAPI_ReleaseSemaphore() Funktion kann man den Zähler des Semaphores um eine bestimmte Anzahl erhöhen.
Der Zähler kann nie kleiner als 0 oder größer als der angegebene $iMaximum Parameter sein.
Mit der _WinAPI_CloseHandle() Funktion kann man das Handle schließen. Das System schließt das Handle automatisch wenn der Prozess terminiert. Das Semaphore-Objekt wird zerstört wenn der letzte Handle geschlossen wird.
_WinAPI_CloseHandle, _WinAPI_ReleaseSemaphore
Suche nach CreateSemaphore in der MSDN Bibliothek.
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
If Not @Compiled Then
MsgBox($MB_SYSTEMMODAL, '', 'Um dieses Skript zu starten, muss es zuerst kompiliert und dann die exe-Datei gestartet werden.')
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