Condividi tramite


Funzione CoWaitForMultipleHandles (combaseapi.h)

Attende che gli handle specificati vengano segnalati o che venga trascorso un periodo di timeout specificato.

Sintassi

HRESULT CoWaitForMultipleHandles(
  [in]  DWORD    dwFlags,
  [in]  DWORD    dwTimeout,
  [in]  ULONG    cHandles,
  [in]  LPHANDLE pHandles,
  [out] LPDWORD  lpdwindex
);

Parametri

[in] dwFlags

Opzioni di attesa. I valori possibili vengono acquisiti dall'enumerazione COWAIT_FLAGS .

[in] dwTimeout

Periodo di timeout, in millisecondi.

[in] cHandles

Numero di elementi nella matrice pHandles .

[in] pHandles

Matrice di handle.

[out] lpdwindex

Puntatore a una variabile che, quando lo stato restituito è S_OK, riceve un valore che indica l'evento che ha causato la restituzione della funzione. Questo valore è in genere l'indice in pHandles per l'handle segnalato.

Se pHandles include uno o più handle per gli oggetti mutex, un valore compreso tra WAIT_ABANDONED_0 e (WAIT_ABANDONED_0 + nCount - 1) indica l'indice in pHandles per il mutex abbandonato.

Se il flag di COWAIT_ALERTABLE è impostato in dwFlags, un valore di WAIT_IO_COMPLETION indica che l'attesa è stata terminata da una o più chiamate asincrone in modalità utente (APC) accodate al thread.

Per altre informazioni, vedere WaitForMultipleObjectsEx .

Valore restituito

Questa funzione può restituire i valori seguenti.

Nota Il valore restituito di CoWaitForMultipleHandles può essere non deterministico se il flag di COWAIT_ALERTABLE è impostato in dwFlags o se pHandles include uno o più handle per gli oggetti mutex. La soluzione alternativa consigliata consiste nel chiamare SetLastError(ERROR_SUCCESS) prima di CoWaitForMultipleHandles.
 
Codice restituito Descrizione
S_OK
L'handle o gli handle necessari sono stati segnalati.
E_INVALIDARG
pHandles era NULL, lpdwindex era NULL o dwFlags non era un valore dall'enumerazione COWAIT_FLAGS .
RPC_E_NO_SYNC
Il valore di pHandles era 0.
RPC_S_CALLPENDING
Il periodo di timeout trascorso prima che l'handle o gli handle necessari siano stati segnalati.

Commenti

A seconda dei flag impostati nel parametro dwFlags, CoWaitForMultipleHandles blocca il thread chiamante finché non si verifica uno degli eventi seguenti:

  • Viene segnalato uno o tutti gli handle. Nel caso degli oggetti mutex, questa condizione viene soddisfatta anche da un mutex abbandonato.
  • Una chiamata asincrona (APC) è stata accodata al thread chiamante con una chiamata alla funzione QueueUserAPC .
  • Il periodo di timeout scade.
Se il chiamante risiede in un appartamento a thread singolo, CoWaitForMultipleHandles entra nel ciclo modale COM e il ciclo di messaggi del thread continuerà a inviare messaggi usando il filtro del messaggio del thread. Se non viene registrato alcun filtro messaggi per il thread, viene usata l'elaborazione predefinita dei messaggi COM.

Se il thread chiamante si trova in un appartamento multithread (MTA), CoWaitForMultipleHandles chiama la funzione WaitForMultipleObjectsEx .

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione combaseapi.h (include Objbase.h)
Libreria Ole32.lib
DLL Ole32.dll

Vedi anche

COWAIT_FLAGS