Release 版本使用运行库multithreaded出错,使用debug multithreaded正常?什么原因? 一个MDI程序,Release版本使用静态连接库,使用运行库multithreaded出错(打开第2个文档后,运行到CVIEW::OnInitialUpdate()后,不能进入OnDraw(),直接退出程序),使用debug multithreaded则一切正常,请问是什么原因? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的debug中可能使用了一些调试语句可以影响程序执行,release中跳过了这些语句,所以出错。查查你与调试相关的语句 CDocument* CMyApp::OpenDocumentFile(LPCTSTR lpszFileName) { CString cs; POSITION pos=GetFirstDocTemplatePosition(); CDocument* cd=NULL; while (pos!=NULL) { CDocTemplate* ct=GetNextDocTemplate(pos); ct->GetDocString(cs,CDocTemplate::docName); if (cs==_T("MyDoc")) { cd=ct->OpenDocumentFile(lpszFileName);// AfxMessageBox("sdgds"); } } return cd;}奇怪的现象:在测试Release版本的问题出现位置时发现:如果在上述程序段的位置没有那句注释掉的"AfxMessageBox"语句,则必然出现本主题问题,而简单地去掉注释符号"//",使程序具有一句"AfxMessageBox"语句,则一切恢复正常!不解是什么原因? 最新测试发现,主题问题在Win98系统下不存在,而即使在Win98下编译连接得到的可执行程序,在Win2000和WinXP中运行照样出问题!难道是操作系统的原因?困惑、不解!什么BUG?请高手指点! 我提示一下思路AfxMessageBox会使程序停止在这里,你OK后再继续运行可能这时,其他线程完成了一些工作。而你AfxMessageBox之后的语句表现可能跟那些工作有关,也就是说,如果你的速度太快,可能不行。建议:将AfxMessageBox改为Sleep(2000)甚至更长试试。目的在于找到问题。 肯定是你的debug和release的LINE选项设置的不同 将AfxMessageBox改为Sleep(2000)和Sleep(20000)后都不行,但发现Sleep都执行了,然后程序照样什么信息都没有地退出了。Linux2001说的LINE选项我不明白,没用过,能说仔细点吗? 如何查看“驱动程序”所占用的内存?? 现在的盗号木马是怎么发送信息的? VC6.0怎么改生成的程序名啊!! 如何得到资源管理器地址栏的地址 想问一下,怎么样修改列表控制的滚动条的样式 串口通信接受数据问题,挺急,谢谢大家 我写的FTP软件载不能列目录的服务器上列目录时死过去了,这是怎么回事呢? 简单问题:定义变量时,什么时候定义为指针变量,什么时候定义为一般变量 谁能告诉我vc中的进度条的颜色怎样改。 win32 问题 创建的窗口不能不屏幕大呢 求解 控制网络流量的问题 如何在自己的程序中向系统中运行的某个程序发送消息?
查查你与调试相关的语句
{
CString cs;
POSITION pos=GetFirstDocTemplatePosition();
CDocument* cd=NULL;
while (pos!=NULL)
{
CDocTemplate* ct=GetNextDocTemplate(pos);
ct->GetDocString(cs,CDocTemplate::docName);
if (cs==_T("MyDoc"))
{
cd=ct->OpenDocumentFile(lpszFileName);
// AfxMessageBox("sdgds");
}
}
return cd;
}奇怪的现象:在测试Release版本的问题出现位置时发现:如果在上述程序段的位置没有那句注释掉的"AfxMessageBox"语句,则必然出现本主题问题,而简单地去掉注释符号"//",使程序具有一句"AfxMessageBox"语句,则一切恢复正常!
不解是什么原因?
AfxMessageBox会使程序停止在这里,你OK后再继续运行
可能这时,其他线程完成了一些工作。而你AfxMessageBox之后的语句表现可能跟那些工作有关,也就是说,如果你的速度太快,可能不行。建议:将AfxMessageBox改为Sleep(2000)甚至更长试试。目的在于找到问题。