如何为 MFC 中的线程完成添加事件处理程序?

Posted

技术标签:

【中文标题】如何为 MFC 中的线程完成添加事件处理程序?【英文标题】:How do I add an event handler for when a thread finishes in MFC? 【发布时间】:2011-01-09 22:41:30 【问题描述】:

目前,我正在使用WaitForSingleObject 等待子任务线程完成。不幸的是,这会导致我的 GUI 锁定。相反,我想做的是设置一个处理程序(在 GUI 线程中),它将在子任务线程完成后调用。还有其他功能吗?

【问题讨论】:

【参考方案1】:

您可以做的就是让您的线程做的最后一件事就是将自定义消息发布到您的窗口。然后使用 MFC 的消息映射将其作为常规消息处理。如果您无法更改线程代码,您可以创建一个新线程等待您的线程,然后发送消息。

正如您已经注意到的,锁定 GUI 线程不是一个好主意...

编辑:如 Hans 在 cmets 中指出的那样,使用 PostMessage 函数发布消息。

【讨论】:

PostMessage,不发送消息。 @Hans Passant:我同意你的观点,这是正确的使用方法。就我而言,措辞草率,我将编辑我的答案以反映这一点。【参考方案2】:

还可以查看 MsgWaitForMultipleObjects(或 MsgWaitForMultipleObjectsEx)。 这些允许线程等待事件句柄和服务窗口消息(检查返回值以查看导致调用返回的原因)。使用示例应该可以通过 goodle 搜索获得。

http://msdn.microsoft.com/en-us/library/ms684245(VS.85).aspx

【讨论】:

以上是关于如何为 MFC 中的线程完成添加事件处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 鼠标事件

Java NIO :如何为通道注册多个事件及多线程处理 Accetp 请求

Java NIO :如何为通道注册多个事件及多线程处理 Accept 请求

Java NIO :如何为通道注册多个事件及多线程处理 Accept 请求

如何为 MFC 中的多个按钮编写一个消息处理程序?

如何为应用程序上下文初始化事件添加钩子?