Wartet bis eines oder alle angegebenen Objekte in dem signalisierten Status sind
#include <WinAPIProc.au3>
_WinAPI_WaitForMultipleObjects ( $iCount, $paHandles [, $bWaitAll = False [, $iTimeout = -1]] )
$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. |
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. |
Suche nach WaitForMultipleObjects in der MSDN Bibliothek.
#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
#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