MFC发送消息到MAIN线程(而不是窗口)?

时间:2013-08-16 10:30:16

标签: c++ windows multithreading mfc

我正在使用MFC和C ++为Windows编写GUI应用程序。

所以我需要从我的工作线程向我的MAIN线程发送消息,告诉它更新我的GUI。但是我不确定如何将消息发送到实际的MAIN线程而不是Window。因为它是我可以看到它收到消息时在MAIN线程中,但我不确定这是保证还是运气。

在工人中:

PostMessage( *myTestToolDlg, WM_YOU_HAVE_DATA,UPDATE_GUI, 0 );

在申请窗口中:

LRESULT CTestToolDlg::OnData(WPARAM wp, LPARAM )

这是否意味着什么?

2 个答案:

答案 0 :(得分:1)

您可以在主线程中使用threadId = GetCurrentThreadId();之类的内容获取主线程的主题ID,然后通过调用PostThreadMessage(threadId, ...) 从中发送消息你的工作线程

然而,正如Hans Passant所说 - > here< - ,您应该避免使用PostThreadMessage向UI线程发送消息,并且最好将消息发送到其窗口。

答案 1 :(得分:0)

如果要直接修改ListBox或ListView,可以使用SendDlgItemMessageA()

示例:

char const* pChar = "My text to be updated";

SendDlgItemMessageA(hWindow, IDC_LISTBOX, LB_DELETESTRING, 0, 0);

SendDlgItemMessageA(hWindow, IDC_LISTBOX, LB_INSERTSTRING, -1, (LPARAM)pChar);