IMessageFilter::MessagePending 方法 (objidl.h)
表示 COM 正在等候回應遠端呼叫時,訊息已抵達。
在等候撥出電話完成時處理輸入,可能會造成複雜問題。 應用程式應該判斷是否要處理訊息,而不中斷呼叫、繼續等候或取消作業。
語法
DWORD MessagePending(
[in] HTASK htaskCallee,
[in] DWORD dwTickCount,
[in] DWORD dwPendingType
);
參數
[in] htaskCallee
所呼叫應用程式的線程標識碼。
[in] dwTickCount
自呼叫以來的刻度數目。 它是從 GetTickCount 函式計算而來。
[in] dwPendingType
在收到訊息或事件時進行的呼叫類型。 可能的值為來自列舉 PENDINGTYPE,其中PENDINGTYPE_TOPLEVEL表示傳出呼叫不是巢狀於另一個應用程式的呼叫內,PENDINTGYPE_NESTED表示傳出呼叫是巢狀於另一個應用程式的呼叫內。
傳回值
這個方法可以傳回下列值。
傳回碼 | Description |
---|---|
|
取消撥出電話。 這應該只在極端情況下傳回。 取消未回復或遭到拒絕的通話,可能會建立孤立的交易並遺失資源。 COM 會失敗原始呼叫並傳回RPC_E_CALL_CANCELLED。 |
|
未使用的。 |
|
鍵盤和滑鼠訊息不再分派。 不過,在某些情況下,滑鼠和鍵盤訊息可能會導致系統死結,在這些情況下,會捨棄滑鼠和鍵盤訊息。 系統會分派WM_PAINT訊息。 工作切換和啟用訊息的處理方式如下。 |
備註
COM 會在應用程式進行 COM 方法呼叫之後呼叫 MessagePending ,並在呼叫傳回之前發生 Windows 訊息。 例如,當用戶選取功能表命令或按兩下物件時,會傳送 Windows 訊息。 在 COM 進行 MessagePending 呼叫之前,它會計算自進行原始 COM 方法呼叫以來經過的時間。 COM 會在 dwTickCount 參數中傳遞經過的時間。 同時,COM 不會從佇列中移除訊息。
出現在呼叫端佇列中的 Windows 訊息應該會保留在佇列中,直到經過足夠的時間,以確保訊息可能不是預先輸入的結果,而是嘗試取得注意。 使用 dwTickCount 參數設定延遲 —建議使用兩秒或三秒的延遲。 如果經過該時間量且呼叫尚未完成,則呼叫端應該排清佇列中的訊息,且應該顯示 [OLE UI 忙碌] 對話方塊,讓使用者選擇重試通話, (繼續等候) 或切換至指定的工作。 這可確保下列行為:
- 如果呼叫在合理的時間內完成,則會正確處理預先輸入。
- 如果被呼叫者沒有回應,則預先輸入不會被誤譯,而且用戶能夠採取行動來解決問題。 例如,OLE 1 伺服器可以在要求處於強制回應對話框中時,將要求排入佇列,而不需要回應。
當原始 COM 呼叫沒有回應時,應用程式可以取消呼叫,並在其記憶體上呼叫 IStorage::Revert ,將 COM 物件還原為一致的狀態。 當容器可以關閉時,可以釋放 物件。 不過,取消呼叫可能會建立孤立的作業和資源流失。 取消應該只做為最後一個手段。 強烈建議應用程式不允許取消這類呼叫。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | objidl.h |