Funktionreferenz


_WinAPI_WaitForMultipleObjects

Beschreibung anzeigen in

Wartet bis eines oder alle angegebenen Objekte in dem signalisierten Status sind

#include <WinAPIProc.au3>
_WinAPI_WaitForMultipleObjects ( $iCount, $paHandles [, $bWaitAll = False [, $iTimeout = -1]] )

Parameter

$iCount Die Anzahl der Objekthandles in dem Array auf das der Zeiger in $paHandles verweist
$paHandles Zeiger auf ein Array von Objekthandles
$bWaitAll [optional] Falls TRUE, kehrt die Funktion zurück sobald der Status von allen Objekten aus $paHandles in dem signalisierten Zustand ist.
Falls FALSE, sobald der Status von irgendeinem der Objekte in dem signalisierten Zustand ist.
Letzteren Falles gibt der Rückgabewert das Objekt an dessen Status die Funktion veranlasst hat zurückzukehren.
$iTimeout [optional] Der Unterbrechungsintervall, in Millisekunden.
Die Funktion kehrt zurück, wenn der Intervall abgelaufen ist, auch wenn der Status des Objekts, festgelegt durch den $bWaitAll-Parameter nicht erfültt ist.
Ist $iTimeout 0, testet die Funktion den Status des Objekts und kehrt unverzüglich zurück.
Ist $iTimeout -1, läuft der Unterbrechungsintervall unendlich.

Rückgabewert

Erfolg: Bezeichnet das Ereignis, das die Funktion zur Rückkehr veranlasst hat
Fehler: -1 WAIT_FAILED. Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlerinformationen zu erhalten.

Verwandte Funktionen

_WinAPI_WaitForSingleObject

Siehe auch

Suche nach WaitForMultipleObjects in der MSDN Bibliothek.

Beispiel

Beispiel 1

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

Global $g_tEvents = DllStructCreate("handle Event[3];")
$g_tEvents.Event(1) = _WinAPI_CreateEvent(0, True, False)
$g_tEvents.Event(2) = _WinAPI_CreateEvent(0, True, False)
$g_tEvents.Event(3) = _WinAPI_CreateEvent(0, True, False)

HotKeySet("{ESC}", "_Exit")
AdlibRegister("_FireEvent_1", 500)
AdlibRegister("_FireEvent_2", 800)

Local $iEvent
While 1
    $iEvent = _WinAPI_WaitForMultipleObjects(3, $g_tEvents, False, 100)
    Switch $iEvent
        Case 0
            ConsoleWrite("+ Erstes Event" & @CRLF)
            _WinAPI_ResetEvent($g_tEvents.Event(1))
        Case 1
            ConsoleWrite("> Zweites Event" & @CRLF)
            _WinAPI_ResetEvent($g_tEvents.Event(2))
        Case 2
            ConsoleWrite("! Beenden Event" & @CRLF)
            AdlibUnRegister("_FireEvent_1")
            AdlibUnRegister("_FireEvent_2")
            _WinAPI_CloseHandle($g_tEvents.Event(1))
            _WinAPI_CloseHandle($g_tEvents.Event(2))
            _WinAPI_CloseHandle($g_tEvents.Event(3))
            ExitLoop
        Case -1 ;Error
            ExitLoop
    EndSwitch
    Sleep(10)
WEnd

Func _Exit()
    _WinAPI_SetEvent($g_tEvents.Event(3))
EndFunc   ;==>_Exit

Func _FireEvent_1()
    _WinAPI_SetEvent($g_tEvents.Event(1))
EndFunc   ;==>_FireEvent_1

Func _FireEvent_2()
    _WinAPI_SetEvent($g_tEvents.Event(2))
EndFunc   ;==>_FireEvent_2

Beispiel 2

#include <WinAPI.au3>
#include <WinAPIProc.au3> ;needed for _WinAPI_ResetEvent

Global $tEvents = DllStructCreate("handle Event[3];")
$tEvents.Event(1) = _WinAPI_CreateEvent(0, True, False)
$tEvents.Event(2) = _WinAPI_CreateEvent(0, True, False)
$tEvents.Event(3) = _WinAPI_CreateEvent(0, True, False)

HotKeySet("{ESC}", "_Exit")
AdlibRegister("_FireEvent_1", 500)
AdlibRegister("_FireEvent_2", 800)

Global $iEvent
While 1
    ;$iEvent = _WinAPI_WaitForMultipleObjects(3, $tEvents, False, 100) ;Maybe future version
    $iEvent = _WinAPI_WaitForMultipleObjects(3, DllStructGetPtr($tEvents), False, 100)
    Switch $iEvent
        Case 0
            ConsoleWrite("+ First Event" & @CRLF)
            _WinAPI_ResetEvent($tEvents.Event(1))
        Case 1
            ConsoleWrite("> Second Event" & @CRLF)
            _WinAPI_ResetEvent($tEvents.Event(2))
        Case 2
            ConsoleWrite("! Exit Event" & @CRLF)
            AdlibUnRegister("_FireEvent_1")
            AdlibUnRegister("_FireEvent_2")
            _WinAPI_CloseHandle($tEvents.Event(1))
            _WinAPI_CloseHandle($tEvents.Event(2))
            _WinAPI_CloseHandle($tEvents.Event(3))
            ExitLoop
        Case -1 ;Error
            ExitLoop
    EndSwitch
WEnd


Func _Exit()
    _WinAPI_SetEvent($tEvents.Event(3))
EndFunc   ;==>_Exit


Func _FireEvent_1()
    _WinAPI_SetEvent($tEvents.Event(1))
EndFunc   ;==>_FireEvent_1


Func _FireEvent_2()
    _WinAPI_SetEvent($tEvents.Event(2))
EndFunc   ;==>_FireEvent_2