Freigeben über


CoWaitForMultipleHandles-Funktion (combaseapi.h)

Wartet darauf, dass bestimmte Handles signalisiert werden oder ein festgelegter Timeoutzeitraum verstrichen ist.

Syntax

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

Parameter

[in] dwFlags

Die Warteoptionen. Mögliche Werte stammen aus der COWAIT_FLAGS-Enumeration .

[in] dwTimeout

Zeitdauer für die Zeitüberschreitung in Millisekunden.

[in] cHandles

Die Anzahl der Elemente im pHandles-Array .

[in] pHandles

Ein Array von Handles.

[out] lpdwindex

Ein Zeiger auf eine Variable, die, wenn die zurückgegebene status S_OK ist, einen Wert empfängt, der das Ereignis angibt, das die Funktion zurückgegeben hat. Dieser Wert ist normalerweise der Index in pHandles für das Handle, das signalisiert wurde.

Wenn pHandles ein oder mehrere Handles für Mutex-Objekte enthält, gibt ein Wert zwischen WAIT_ABANDONED_0 und (WAIT_ABANDONED_0 + nCount - 1) den Index in pHandles für den verworfenen Mutex an.

Wenn das COWAIT_ALERTABLE-Flag in dwFlags festgelegt ist, gibt der Wert WAIT_IO_COMPLETION an, dass die Wartezeit durch einen oder mehrere asynchrone Prozeduraufrufe (APC) im Benutzermodus beendet wurde, die im Thread in die Warteschlange eingereiht wurden.

Weitere Informationen finden Sie unter WaitForMultipleObjectsEx .

Rückgabewert

Diese Funktion kann die folgenden Werte zurückgeben.

Hinweis Der Rückgabewert von CoWaitForMultipleHandles kann nicht deterministisch sein, wenn das flag COWAIT_ALERTABLE in dwFlags festgelegt ist oder wenn pHandles ein oder mehrere Handles für Mutex-Objekte enthält. Die empfohlene Problemumgehung besteht darin, SetLastError(ERROR_SUCCESS) vor CoWaitForMultipleHandles aufzurufen.
 
Rückgabecode BESCHREIBUNG
S_OK
Das erforderliche Handle bzw. die erforderlichen Handles wurden signalisiert.
E_INVALIDARG
pHandles war NULL, lpdwindex war NULL, oder dwFlags war kein Wert aus der COWAIT_FLAGS-Enumeration .
RPC_E_NO_SYNC
Der Wert von pHandles war 0.
RPC_S_CALLPENDING
Der Timeoutzeitraum ist abgelaufen, bevor das erforderliche Handle oder die erforderlichen Handles signalisiert wurden.

Hinweise

Je nachdem, welche Flags im dwFlags-Parameter festgelegt sind, blockiert CoWaitForMultipleHandles den aufrufenden Thread, bis eines der folgenden Ereignisse auftritt:

  • Ein oder alle Handles werden signalisiert. Bei Mutex-Objekten wird diese Bedingung auch dadurch erfüllt, dass ein Mutex aufgegeben wird.
  • Ein asynchroner Prozeduraufruf (APC) wurde mit einem Aufruf der QueueUserAPC-Funktion im aufrufenden Thread in die Warteschlange eingereiht.
  • Der Timeoutzeitraum läuft ab.
Wenn sich der Aufrufer in einem Singlethread-Apartment befindet, wechselt CoWaitForMultipleHandles in die modale COM-Schleife, und die Nachrichtenschleife des Threads sendet weiterhin Nachrichten mithilfe des Nachrichtenfilters des Threads. Wenn kein Nachrichtenfilter für den Thread registriert ist, wird die standardmäßige COM-Nachrichtenverarbeitung verwendet.

Wenn sich der aufrufende Thread in einem Multithread-Apartment (MTA) befindet, ruft CoWaitForMultipleHandles die WaitForMultipleObjectsEx-Funktion auf.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile combaseapi.h (include Objbase.h)
Bibliothek Ole32.lib
DLL Ole32.dll

Weitere Informationen

COWAIT_FLAGS