线程问题:

crocodile1980 2004-05-05 11:57:49
在线程的内部是否不能使用CMainFrame *的指针?
UINT CommThread(void *pw)
{
CMainFrame *pMainWnd=(CMainFrame *)AfxGetMainWnd();
CGpsWatchView *pView=(CGpsWatchView *)pMainWnd->GetActiveView();
//此处错,无法使用pView指针?
CSelectDlg *pThis=(CSelectDlg*)pw;
.....
return 0;
}
...全文
94 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspnetwuxueyou 2004-05-06
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/article/26/26152.shtm
aspnetwuxueyou 2004-05-06
  • 打赏
  • 举报
回复
CWnd是模块线程相关的一个类,也就是在不同的不同模块,不同线程中值是不同的
但是HWnd是线程无关的,就是可以跨线程的
UDX协议 2004-05-06
  • 打赏
  • 举报
回复
在线程的内部能使用CMainFrame *的指针

CGpsWatchView *pView=(CGpsWatchView *)pMainWnd->GetActiveView();
是pMainWnd->GetActiveView();初步确定出了问题。

--------------------》
在调试情况下改成CView *pView = pMainWnd->GetActiveView();看此时pView的类型是否为CGpsWatchView.
可以这样判断
CRuntimeClass* prt = RUNTIME_CLASS( CGpsWatchView);
ASSERT( lstrcmp( prt ->m_lpszClassName, "CGpsWatchView" ) == 0 );

UDX协议 2004-05-06
  • 打赏
  • 举报
回复

在线程的内部能使用CMainFrame *的指针

CGpsWatchView *pView=(CGpsWatchView *)pMainWnd->GetActiveView();
是pMainWnd->GetActiveView();初步确定出了问题。

--------------------》
在调试情况下改成CView *pView = pMainWnd->GetActiveView();看此时pView的类型是否为CGpsWatchView.
可以这样判断
CRuntimeClass* prt = RUNTIME_CLASS( CGpsWatchView);
ASSERT( lstrcmp( pView ->m_lpszClassName, "CGpsWatchView" ) == 0 );
microgiant 2004-05-06
  • 打赏
  • 举报
回复
你起线程的时候带近来一个this就是了.MainWnd,从this中带出来.

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧