如何转移线程以将消息发送到新窗口

How to divert a thread to post messages to a new window

本文关键字:新窗口 窗口 消息 何转移 转移 线程      更新时间:2023-10-16

我有一个线程,我传递一个窗口的HWND,在那里它发布消息并更新进度条。然而,用户可以去另一个窗口(模态),我也想显示这个线程的进度。传递初始HWND显然是直截了当的,但是我如何才能转移线程,以便在新窗口运行后将消息发布到新窗口?这是一个c++工作线程。我使用的是Windows 7,MFC, c++。

换一种方式。让进度窗口从工作线程获得类的地址,并定期向它询问进度。比如计时器。这样,你就可以有尽可能多的进度窗口。

有两种方法。一种是Daniel的方式,从UI窗口轮询进度信息。你所需要的只是在线程实现类(或等价的自由函数)中有一个线程安全的` int GetProgressPercent() const `成员。

另一种方法是在进程发生时在工作线程中使用PostMessage或PostThreadMessage,并在另一端处理调整条的消息。

两者的主要问题是处理生命周期问题,防止调用对象或HWND时,它实际上已经消失了。因此,PostThreadMessage方法可能是最安全的基准,因为主线程应该在那里并管理所有其他线程,并跟踪程序的总体状态,从而能够对活动窗口进行有意义的分派,或者什么都不做。但它也是最复杂的。