为什么UpdateAllViews会出现ASSERT宏错误呢?在线等,谢谢~~~~~~~~
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




