UDF > WinAPIEx > Processes & Synchronization > Synchronization >


_WinAPI_WaitForMultipleObjects

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]] )

Param�tres

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

Valeur de retour

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.

En relation

_WinAPI_WaitForSingleObject

Voir aussi

Consultez WaitForMultipleObjects dans la librairie MSDN.

Exemple

#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