Funktionreferenz


_WinAPI_CreateSemaphore

Beschreibung anzeigen in

Erzeugt oder öffnet ein benanntes oder unbenanntes Semaphore-Objekt.

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

Parameter

$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.

Rückgabewert

Erfolg: Das Handle des neu erstellen Semaphore-Objektes.
Fehler: 0. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten.

Bemerkungen

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.

Verwandte Funktionen

_WinAPI_CloseHandle, _WinAPI_ReleaseSemaphore

Siehe auch

Suche nach CreateSemaphore in der MSDN Bibliothek.

Beispiel

#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