线程之间的通信问题
VC SDI应用程序中,有自定义一个线程类 CGpsThread继承CWinThread,还有一个继承CView类的应用程序视图CDemo类,现要在这两个类中进行自定义消息通信。
视图类首先发一个消息到线程类中,然后线程类回应一个消息给视图类
在视图类中启动线程和发送消息:
void CDemoView::OnStartthread()
{
m_pGpsThread=(CGpsThread*)AfxBeginThread(RUNTIME_CLASS(CGpsThread));
Sleep(100);
m_pGpsThread->PostThreadMessage(WM_FEATURE,NULL,NULL);
}
在视图类中接收消息
LRESULT CDemoView::OnDisplay(WPARAM wParam,LPARAM lParam){
AfxMessageBox("display");
return 0;
}
而在线程中回应信息:
LONG CGpsThread::OnGps(UINT wParam,LONG lParam)
{
afxMessage("accept");
::PostMessage((HWND)(CMainFrame*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView (),WM_DISPLAY,NULL,NULL); //向视图类发送消息
}
其中在CGpsThread中函数映射和申明
afx_msg LONG OnMessage(UINT wParam,LONG lParam);
ON_THREAD_MESSAGE(WM_MESSAGE,OnCalculate)
而在应用程序视图类中也有申明
LRESULT OnDisplay(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_DISPLAY,OnDisplay)
最终结果是视图类能向线程发送消息,即线程能显示accept..
但是线程却不能回应消息给视图类,即没有任何反应,也没有错误提示.不知道是不是在线程类中的发送消息中的第一窗口参数没写对..不知道在一个线程类怎么访问视图类指针..还望高手指教.感谢.
[解决办法]
把试图类指针作为线程参数传递进去.或者用全局变量
[解决办法]
(HWND)(CMainFrame*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView (),
这里的应该对吧,你直接将你View的HWND窗口句柄作为线程函数的参数传递给线程不就可以了
[解决办法]