向同一进程中的另一个线程发出信号
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和类似宏的参考资料)
我有一个处理某些数据的应用程序,并将其显示在 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和类似宏的参考资料)