CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

为什么UpdateAllViews会出现ASSERT宏错误呢?在线等,谢谢~~~~~~~~

楼主laohubinbin(老虎斌斌)2006-03-15 19:03:50 在 VC/MFC / 基础类 提问

Doc中的一个函数用到了UpdateAllViews函数用来刷新视图  
   
  但是不知道为什么,调试时发现遇到UpdateAllViews函数时会出现ASSERT宏错误  
   
  跟踪了一下  
   
  void   CDocument::UpdateAllViews(CView*   pSender,   LPARAM   lHint,   CObject*   pHint)  
          //   walk   through   all   views  
  {  
          ASSERT(pSender   ==   NULL   ||   !m_viewList.IsEmpty());  
                  //   must   have   views   if   sent   by   one   of   them  
   
          POSITION   pos   =   GetFirstViewPosition();  
          while   (pos   !=   NULL)  
          {  
                  CView*   pView   =   GetNextView(pos);  
                  ASSERT_VALID(pView);                                                   《----此句错误  
                  if   (pView   !=   pSender)  
                          pView->OnUpdate(pSender,   lHint,   pHint);  
          }  
  }  
   
  请各位帮帮忙啊  
  急用  
  谢谢 问题点数:40、回复次数:9Top

1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-15 19:25:48 得分 6

跨线程了?或文档类指针根本就有问题。Top

2 楼laohubinbin(老虎斌斌)回复于 2006-03-15 19:39:05 得分 0

这个UpdateAllViews函数确实是在一个辅助线程的控制函数中调用的  
   
  请问是这个原因吗  
   
  因该怎样处理呢Top

3 楼bluewindyy(班班)回复于 2006-03-15 20:18:23 得分 6

MFC界面包装类在跨线程调用的时候就会这样  
  可以用窗口类的句柄在线程间进行访问Top

4 楼laohubinbin(老虎斌斌)回复于 2006-03-15 20:33:09 得分 0

具体描述一下我的程序吧:  
   
  我定义了一个CMedRencSysDoc*   m_pDoc;                 //Doc的全局变量  
  然后在全局控制函数中调用m_pDoc->OnDisplayModel函数  
  而void   CMedRencSysDoc::OnDisplayModel()  
  {  
          ……  
   
  UpdateAllViews(NULL);  
   
          ……  
  }  
   
   
  请具体指教一下好吗  
  我应该怎么办呢Top

5 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-15 20:37:16 得分 6

请由辅助线程向主线程发送自定消息,然后由主线程来处理。Top

6 楼laohubinbin(老虎斌斌)回复于 2006-03-15 20:46:33 得分 0

是的  
  我试了一下发消息  
   
  我是这样做的:  
  #define   WM_DISPLAY_MODEL         WM_USER+200  
  ON_MESSAGE(   WM_DISPLAY_MODEL,   OnDisplayModel)  
   
  然后在全局控制函数中  
  PostMessage(NULL   ,WM_DISPLAY_MODEL,   NULL,   参数);  
   
  但是好象没有发送成功  
  因为OnDisplayModel函数没有被调用啊Top

7 楼lemonxinmei330()回复于 2006-03-15 21:38:26 得分 6

这样发送消息应该没问题吧  
   
  samantha@bytefocus.comTop

8 楼bluewindyy(班班)回复于 2006-03-15 21:42:20 得分 6

你的PostMessage(NULL   ,WM_DISPLAY_MODEL,   NULL,   参数);没有指定向哪个窗口发送消息,  
  而且Document也不能接受消息,你可以在Mainframe里写一个消息相应函数,内容就是调用Doc的OnDisplayModel   你在线程函数里向MainFrame发消息,在线程函数中用AfxGetMainWnd可以获取当前的MainframeTop

9 楼bluewindyy(班班)回复于 2006-03-15 21:43:36 得分 10

就是用  
  AfxGetMainWnd()->PostMessage(WM_DISPLAY_MODEL,   NULL,   参数);Top

相关问题

  • 一个ASSERT错误!
  • ASSERT 错误,请求解答
  • 运行错误!提示文档对象的ASSERT错误
  • 莫名其妙的Assert错误
  • 怪问题啊!ASSERT(::IsWindow(m_hWnd))错误
  • [求助][VC++] 有关 assert() 的错误
  • vc程序在执行时出现assert错误,救命!!!!
  • 进来看看吧,一个奇怪的 ASSERT() 错误
  • 为什么建立多分割视会出assert错误?
  • m_pusrrcdset->m_pDatabase->ExecuteSQL("")为什么不行?老是ASSERT错误

关键词

  • 函数
  • 线程
  • 消息
  • null
  • updateallviews
  • ondisplaymodel
  • 调用
  • psender
  • 错误
  • pview

得分解答快速导航

  • 帖主:laohubinbin
  • DentistryDoctor
  • bluewindyy
  • DentistryDoctor
  • lemonxinmei330
  • bluewindyy
  • bluewindyy

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo