向同一进程中的另一个线程发出信号

Signal another thread within the same process

我有一个处理某些数据的应用程序,并将其显示在 UI。

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

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

UI 是基于 CListCtrl 的 MFC 控件。

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

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

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

消息参数应该是用户定义的消息,所以由您定义的东西,例如

#define WM_MYMESSAGE (WM_USER + 1)

其他两个参数(LPARAM 和 LPARAM)将包含您需要传递给 GUI 的数据。因此,在 CreateThread 中,您需要传递有关将接收消息的 window 的一些信息(如果您使用 MFC,则为 CWnd 指针,否则为 HWND 句柄)。

然后你需要在你的内部处理这个消息window(参见关于ON_COMMAND和类似宏的参考资料)