Attend jusqu'à ce que l'un ou tous les objets spécifiés soient dans l'état signalé
#include <WinAPIProc.au3>
_WinAPI_WaitForMultipleObjects ( $iCount, $paHandles [, $bWaitAll = False [, $iTimeout = -1]] )
$iCount | Le nombre de handles d'objet dans le tableau pointé par $paHandles |
$paHandles | Pointeur vers un tableau de handles d'objet |
$bWaitAll | [optionnel] Si True, la fonction retourne lorsque l'état de tous les objets du tableau $paHandles est signalée. Si False, la fonction retourne lorsque l'état de l'un quelconque des objets est mis à signalé. Dans ce dernier cas, la valeur de retour indique l'objet dont l'état a provoqué le retour de la fonction. |
$iTimeout | [optionnel] L'intervalle de délai d'attente, en millisecondes. La fonction retourne si l'intervalle est écoulé, même si les conditions spécifiées par le paramètre $bWaitAll ne sont pas remplies. Si 0, la fonction teste l'état des objets spécifiés et retourne immédiatement. Si -1, le délai d'attente de la fonction ne sera jamais écoulé. |
Succès: | Retourne l'événement qui a causé le retour de la fonction. |
Échec: | Retourne (-1) WAIT_FAILED, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur. |
Consultez WaitForMultipleObjects dans la librairie MSDN.
#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 Do $iEvent = _WinAPI_WaitForMultipleObjects(3, $g_tEvents, False, 100) Switch $iEvent Case 0 ConsoleWrite("+ First Event" & @CRLF) _WinAPI_ResetEvent($g_tEvents.Event(1)) Case 1 ConsoleWrite("> Second Event" & @CRLF) _WinAPI_ResetEvent($g_tEvents.Event(2)) EndSwitch Until $iEvent = 2 Or $iEvent = -1 ;Erreur If $iEvent = 2 Then ConsoleWrite("! Exit 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)) EndIf 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