一个MFC的程序,类似资源
管理
器,我需要在原来程序的基础上做些修改.
结果修改后,出现在wincore.cpp的3487行中出现assert错误
调试之后,跳到这里:
ASSERT(ContinueModal());
Call Stack的情况是:
CWnd::RunModalLoop(unsigned long 4) line 3486 + 34 bytes
CDialog::DoModal() line 539 + 12 bytes
……
……
有没有遇到类似情况的
兄弟
们
麻烦告诉我一下可能的原因
thanks
问题点数:100、回复次数:9Top
1 楼aceouter(outer)回复于 2006-03-08 15:32:27 得分 10
代码贴出来看看Top
2 楼gold_water(风雨无阻)回复于 2006-03-08 16:23:56 得分 5
可能是溢出了.建议再仔细检查一下代码Top
3 楼gold_water(风雨无阻)回复于 2006-03-08 16:26:13 得分 0
可能是溢出了.建议再仔细检查一下代码Top
4 楼syy64(太平洋)回复于 2006-03-08 16:44:44 得分 5
调试看看,从你的 程序 的哪一行进去的。Top
5 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-08 17:26:00 得分 0
CDialog::DoModal() 之后,开启了一个线程做了一些操作,也没有什么特别的操作Top
6 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-08 17:33:51 得分 0
CLinkDlg继承CDialog,下面是代码
DWORD WINAPI LinkThread(LPVOID lpParameter)
{
//这个线程做了点事情,
成功
的话就发一个LINKOK的消息
SendMessage(((CLinkDlg*)lpParameter)->GetSafeHwnd(), LINKOK, 0, NULL);
}
CLinkDlg::CLinkDlg(CWnd* pParent /*=NULL*/) : CDialog(CLinkDlg::IDD, pParent)
{
//初始化
}
BOOL CLinkDlg::OnInitDialog()
{
//创建了个线程
::CreateThread(NULL, 0, LinkThread, (LPVOID)this, 0, &m_dwThreadID);
}
void CLinkDlg::OnLinkOK(WPARAM wParam,LPARAM lParam)
{
//收到了LINK_OK的消息后到了这里
CDialog::OnOK();
}
void CLinkDlg::OnCancel()
{
//取消那个线程
CDialog::OnCancel();
}
Top
7 楼newcore(to be or not to be, it's a question.)回复于 2006-03-08 18:19:14 得分 40
感觉是线程启动后,就发送一个消息给对话框,然后对话框由于某种原因被非法关闭。(
资源
没有释放,或者还在做其他事情,但是却没有作完???)
个人觉得,这里对话框的生命周期和线程中止时机最好有个
同步
机制...
Top
8 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-08 18:39:20 得分 40
SendMessage
=>
PostMessageTop
9 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-13 09:26:38 得分 0
SendMessage 改成 PostMessage 就可以了,不会在出现那个assert
多谢各位