IMessageFilter::MessagePending 方法 (objidl.h)
指示 COM 正在等待响应远程呼叫时消息已到达。
在等待传出调用完成时处理输入可能会带来复杂情况。 应用程序应确定是在不中断调用的情况下处理消息、继续等待还是取消操作。
语法
DWORD MessagePending(
[in] HTASK htaskCallee,
[in] DWORD dwTickCount,
[in] DWORD dwPendingType
);
参数
[in] htaskCallee
被调用应用程序的线程 ID。
[in] dwTickCount
自调用以来的时钟周期数。 它是从 GetTickCount 函数计算的。
[in] dwPendingType
接收消息或事件的调用类型。 可能的值来自枚举 PENDINGTYPE,其中PENDINGTYPE_TOPLEVEL表示传出调用未嵌套在另一个应用程序的调用中,PENDINTGYPE_NESTED表示传出调用嵌套在另一个应用程序的调用中。
返回值
此方法可以返回以下值。
返回代码 | 说明 |
---|---|
|
取消传出呼叫。 这应该仅在极端条件下返回。 取消尚未回复或被拒绝的呼叫可能会创建孤立事务并丢失资源。 COM 无法执行原始调用,并返回RPC_E_CALL_CANCELLED。 |
|
未使用。 |
|
不再调度键盘和鼠标消息。 但是,在某些情况下,鼠标和键盘消息可能会导致系统死锁,在这些情况下,鼠标和键盘消息会被丢弃。 调度WM_PAINT消息。 任务切换和激活消息的处理方式与以前一样。 |
注解
COM 在应用程序进行 COM 方法调用后调用 MessagePending ,并在调用返回之前发生 Windows 消息。 例如,当用户选择菜单命令或双击对象时,将发送 Windows 消息。 在 COM 进行 MessagePending 调用之前,它会计算自进行原始 COM 方法调用以来的运行时间。 COM 在 dwTickCount 参数中提供已用时间。 同时,COM 不会从队列中删除消息。
出现在调用方队列中的 Windows 消息应保留在队列中,直到经过足够的时间,以确保消息可能不是提前键入的结果,而是试图引起注意。 使用 dwTickCount 参数设置延迟 - 建议使用 2 秒或 3 秒的延迟。 如果经过该时间并且调用尚未完成,则调用方应刷新队列中的消息,并显示“OLE UI 忙碌”对话框,为用户提供重试调用 (继续等待) 或切换到指定任务的选项。 这可确保以下行为:
- 如果调用在合理的时间内完成,将正确处理提前键入。
- 如果被调用方不响应,则不会误解前面键入,并且用户能够采取行动来解决问题。 例如,当请求位于模式对话框中时,OLE 1 服务器可以将请求排入队列,而不会做出响应。
当原始 COM 调用没有响应时,应用程序可以取消调用,并通过在其存储上调用 IStorage::Revert 将 COM 对象还原到一致状态。 当容器可以关闭时,可以释放 对象。 但是,取消调用可能会造成孤立的操作和资源泄漏。 应仅将取消用作最后手段。 强烈建议应用程序不允许取消此类调用。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objidl.h |