C++ 向同一进程中的另一个线程发送信号

C++ 向同一进程中的另一个线程发送信号,c++,multithreading,mfc,signals,C++,Multithreading,Mfc,Signals,我有一个处理特定数据的应用程序,并将其显示在UI中 最初,我只有一个线程,即主进程,来完成工作,即检索数据进行处理,处理数据,然后更新UI。数据驻留在另一台服务器上 但是,应用程序的需求发生了变化,需要从服务器检索和处理的数据比以前想象的要多得多。这会产生性能问题,因为必须检索、处理数据,然后UI必须确定数据应该放在哪里 UI是基于CListCtrl的MFC控件 为了解决这个问题,我将处理线程分为两个线程,一个线程获取并处理数据,另一个线程显示数据,即GUI 我需要某种方法向UI线程发出信号,表

我有一个处理特定数据的应用程序,并将其显示在UI中

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

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

UI是基于
CListCtrl
的MFC控件

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


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

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

message param应该是用户定义的消息,因此由您定义的内容,例如

#define WM_MYMESSAGE (WM_USER + 1)
另外两个参数(LPARAM和LPARAM)将包含需要传递到GUI的数据。因此,在CreateThread中,您需要传递有关将接收消息的窗口的一些信息(如果使用MFC,则为CWnd指针,否则为HWND句柄)


然后,您需要在窗口内处理此消息(请参阅关于ON_命令和类似宏的参考资料)

OK-因此,在我需要发送通知的地方,我已经完成了一个
PostMessage(this->GetSafeHwnd(),WM_COMPLETE,0,0')。此外,我还定义了一个“ON”消息(WM_COMPLETE,&someClass::someFunc())
,其中
someFunc()
LRESULT someFunc(WPARAM,LPARAM)
。我执行应用程序,但不知何故,尽管设置了
断点
,它似乎并没有命中函数。我感觉窗口的句柄是个问题,但它是一个CDialog派生类,在创建处理线程之前,我使用InitDoalog()中的getSafeHwnd()获取句柄。可能的问题是,
WM_USER+x
不适用于应用程序。此消息范围供窗口实现使用。改为使用
WM_APP+x
。@user:事实证明,对于对话框
WM_user+1
,实际上是
DM_SETDEFID
,一条已附加到消息处理程序的消息。正如我在之前的评论中指出的,marom选择了错误的消息范围。改为使用WM_APP+1。