CoWaitForMultipleHandles 函式 (combaseapi.h)

等候指定的控制碼收到訊號,或等候指定的逾時期間經過。

語法

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

參數

[in] dwFlags

等候選項。 可能的值取自 COWAIT_FLAGS 列舉。

[in] dwTimeout

逾時期限 (毫秒)。

[in] cHandles

pHandles陣列中的專案數目。

[in] pHandles

控制碼陣列。

[out] lpdwindex

當傳回的狀態S_OK時,變數的指標會收到值,指出導致函式傳回的事件。 此值通常是收到訊號之控制碼的 pHandles 索引。

如果 pHandles 包含一或多個 mutex 物件的控制碼,WAIT_ABANDONED_0 與 (WAIT_ABANDONED_0 + nCount -) 1 之間的值會指出已放棄之 mutex 的 pHandles 索引。

如果在dwFlags中設定COWAIT_ALERTABLE旗標,WAIT_IO_COMPLETION值表示等候已由一或多個使用者模式非同步程序呼叫結束, (APC) 佇列至執行緒。

如需詳細資訊,請參閱 WaitForMultipleObjectsEx

傳回值

此函式可以傳回下列值。

注意如果COWAIT_ALERTABLE旗標是在dwFlags中設定,或pHandles包含一或多個 mutex 物件的控制碼,CoWaitForMultipleHandles的傳回值可能不具決定性。 建議的因應措施是在CoWaitForMultipleHandles之前呼叫 SetLastError (ERROR_SUCCESS)
 
傳回碼 描述
S_OK
已發出必要控制碼或控制碼的訊號。
E_INVALIDARG
pHandlesNulllpdwindexNull,或 dwFlags 不是 來自COWAIT_FLAGS 列舉的值。
RPC_E_NO_SYNC
pHandles的值是 0。
RPC_S_CALLPENDING
在收到必要控制碼或控制碼的訊號之前經過的逾時期間。

備註

根據 dwFlags 參數中設定的旗標而定, CoWaitForMultipleHandles 會封鎖呼叫執行緒,直到發生下列其中一個事件:

  • 發出一或所有控制碼的訊號。 在 Mutex 物件的情況下,也會由被放棄的 Mutex 滿足此條件。
  • 非同步程序呼叫 (APC) 已排入佇列至呼叫執行緒,並呼叫 QueueUserAPC 函式。
  • 逾時期限到期。
如果呼叫端位於單一執行緒 Apartment 中, CoWaitForMultipleHandles 會進入 COM 強制回應迴圈,而執行緒的訊息迴圈會繼續使用執行緒的訊息篩選來分派訊息。 如果未為執行緒註冊任何訊息篩選,則會使用預設 COM 訊息處理。

如果呼叫執行緒位於多執行緒 Apartment (MTA) , CoWaitForMultipleHandles 會呼叫 WaitForMultipleObjectsEx 函 式。

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 combaseapi.h (包含 Objbase.h)
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

COWAIT_FLAGS