请教多线程编程高手,在线程中获得MDI主窗体(MainFrame)中的变量

明湖居士2018 2008-05-08 05:13:00
rt,我在一个线程函数中用下面的语句获得一个指向MainFrame的指针,就像这样:

CMainFrame* pMf = (CMainFrame*)AfxGetMainWnd();
pMf->m_wndWorkSpace.m_map_cus.Lookup(cus_id, cus_name);

但是用pMf访问其变量的时候,老是出现断言错误。设了个断点跟进去看了看,pMf指针指向的MainFrame对象,
其变量的地址,比如m_wndWorkSpace的,都为0x00000000,郁闷。还请高手帮忙看看是什么问题,如何解决,谢谢啦。
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
明湖居士2018 2008-05-09
  • 打赏
  • 举报
回复
说实话,楼上老兄的办法确实好。不过我接手的这个系统从一开始设计的就TMD不好,
害得我很多地方还得重构,我这个郁闷啊,就别提了,TNND……
雨中的月儿 2008-05-09
  • 打赏
  • 举报
回复
我在工程上,一般都是这样用

/** GlobalDefine.h **/
extern CMainFrame *g_pMf;

/** GlobalDefine.cpp **/
#include "GlobalDefine.h"
CMainFrame *g_Mf = NULL;

在OnInitDialog()或其它初始化函数中对g_pMf赋值,

然后就可以任何想用的地方#include "GlobalDefine.h",使用g_pMf了……
这样既不浪费WPARAM和LPARAM,也避免你出上面的问题。

当然,要防止此指针被修改,呵呵……可以加一些设计。
雨中的月儿 2008-05-09
  • 打赏
  • 举报
回复
你看一下,CMainFrame *pMf的指向的地址是和真正的MainFrame一样么?

如果不一样,说明AfxGetMainWnd()得到的根本就不是CMainFrame指针,而你却把它硬生生的糊成CMainFrame指针了。

我怀疑是AfxGetMainWnd()的错误。
明湖居士2018 2008-05-08
  • 打赏
  • 举报
回复
不瞒两位,WPARAM和LPARAM都被占用了,5555……
  • 打赏
  • 举报
回复
CMainFrame* pMf = (CMainFrame*)lpParameter;

试试。
yxz_lp 2008-05-08
  • 打赏
  • 举报
回复
把CMainFrame*作为线程参数传入,AfxGetMainWnd()要基于线程模块状态。

15,471

社区成员

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

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