MFC 窗口线程间通信:使用 PostMessage 发送消息
在 MFC 中,可以使用 PostMessage 函数将消息发送给窗口的消息队列。以下是使用 PostMessage 在线程之间发送消息的步骤和示例代码:
- 定义自定义消息:
// MyMFCWindow.h
class CMyMFCWindow : public CWnd
{
public:
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
// ...
};
// MyMFCWindow.cpp
BEGIN_MESSAGE_MAP(CMyMFCWindow, CWnd)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
// ...
END_MESSAGE_MAP()
LRESULT CMyMFCWindow::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// 在这里处理消息
// ...
return 0;
}
- 创建线程:
UINT MyThreadFunction(LPVOID pParam)
{
CMyMFCWindow* pWnd = (CMyMFCWindow*)pParam;
// 发送消息
pWnd->PostMessage(WM_MY_MESSAGE, wParam, lParam);
return 0;
}
- 在 MFC 窗口类中创建线程并调用线程函数:
// MyMFCWindow.cpp
void CMyMFCWindow::SomeFunction()
{
// 创建线程
AfxBeginThread(MyThreadFunction, this);
}
在上述代码中:
WM_MY_MESSAGE是自定义的消息 ID。OnMyMessage是用来处理自定义消息的函数。MyThreadFunction是线程函数,它接收指向 MFC 窗口对象的指针pWnd,并使用PostMessage发送消息。SomeFunction是 MFC 窗口类中的一个函数,它负责创建线程并调用线程函数。
注意事项:
- 确保线程函数中的
pWnd指针有效。在创建线程时将this指针传递给线程函数,可以确保pWnd指向正确的窗口对象。 - 使用
PostMessage发送消息可以确保消息被安全地加入到窗口的消息队列中,并在窗口的空闲时间被处理。 - 在使用
PostMessage发送消息时,请注意消息参数的类型和意义。 - 如果需要更复杂的线程间通信,可以使用其他方法,例如事件对象或信号量。
希望这些信息对您有所帮助。如果您还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/qECF 著作权归作者所有。请勿转载和采集!