用信号通知同一进程中的另一个线程

Signal another thread within the same process

本文关键字:另一个 线程 进程 信号 通知      更新时间:2023-10-16

我有一个应用程序,它处理某些数据,并在UI中显示这些数据。

最初,我只有一个线程,即主进程,来完成工作,即检索要处理的数据,处理数据,然后更新UI。数据驻留在另一台服务器上。

但是,应用程序的要求发生了变化,必须从服务器检索和处理比以前想象的多得多的数据。这造成了性能问题,因为必须检索、处理数据,然后UI必须确定它应该放在的哪里

UI是基于CListCtrl的MFC控件。

为了解决这个问题,我将处理分为两个线程,一个获取数据并进行处理,另一个将显示数据,即GUI。

我需要某种方式向UI线程发出信号,表明数据已被提取和处理。线程是使用CreateThread创建的。向另一个线程发出信号表明它可以完成自己的工作的最佳方式是什么?

我建议如下:当您的单独线程必须通知GUI时,您应该向包含控件的窗口调用PostMessage。

消息参数应该是用户定义的消息,因此由您定义,例如

#define WM_MYMESSAGE (WM_USER + 1)

另外两个param(LPARAM和LPARAM(将包含需要传递给GUI的数据。因此,在CreateThread中,您需要传递一些关于将接收消息的窗口的信息(如果使用MFC,则为CWnd指针,否则为HWND句柄(。

然后,您需要在窗口中处理此消息(请参阅有关ON_COMMAND和类似宏的参考资料(