首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

线程之间的通信有关问题

2012-03-09 
线程之间的通信问题VC SDI应用程序中,有自定义一个线程类 CGpsThread继承CWinThread,还有一个继承CView类

线程之间的通信问题
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窗口句柄作为线程函数的参数传递给线程不就可以了
[解决办法]

探讨
(HWND)(CMainFrame*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView (),
这里的应该对吧,你直接将你View的HWND窗口句柄作为线程函数的参数传递给线程不就可以了

[解决办法]
((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView()->PostMessage(WM_DISPLAY, NULL, NULL);
or
::PostMessage((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView()->GetSafeHwnd(),..)


热点排行