📄 subject_59387.htm
字号:
<p>
序号:59387 发表者:最后一根稻草 发表日期:2003-11-07 14:26:38
<br>主题:进程中止时的异常情况该怎样处理
<br>内容:这两天刚接触到进程的问题,发现在终止一个子进程时经常有异常情况,我用的子进程是windows自带的计算器。怎样才能使子进程正常退出呢。请高手指点。以下是部分代码。<BR><BR>void CMptDlg::OnSp() <BR>{<BR> // TODO: Add your control notification handler code here<BR> if(m_Pr!=" ")<BR> {<BR> char *buf;<BR> memset(&infoStart,0,sizeof(infoStart));<BR> infoStart.cb=sizeof(STARTUPINFO);<BR> buf=m_Pr.GetBuffer(100);<BR> CreateProcess(<BR> NULL,buf,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,<BR> NULL,NULL,&infoStart,&infoProcess);<BR> m_List.AddTail(infoProcess.hProcess);<BR> }<BR> <BR>}<BR><BR>void CMptDlg::OnSpTm() <BR>{<BR> // TODO: Add your control notification handler code here<BR> LPDWORD lpDWord;<BR> HANDLE hProcess;<BR> if(!m_List.IsEmpty())<BR> {<BR> hProcess=m_List.GetTail();<BR> m_List.RemoveTail();<BR> ::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR> lpDWord));<BR> }<BR> <BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-11-07 15:27:41
<br>内容:if(m_Pr!=" ")<BR><BR>你想要的是不等于NULL还是不等于空格?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-07 17:07:25
<br>内容:我说具体一点,这个程序在创建进程的时候很好,只是在终止进程的时候会发生这样的错误:一旦按下“终止子进程”按钮就会出现如下对话框:<BR>"0x77e7eee7"指令引用的"0xcccccccc"内存。该内存不能为"written".<BR>要终止程序,请单击“确定”<BR>要调试程序,请单击“取消”<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-11-07 23:25:21
<br>内容:不是所有的异常都能捕获到的。。。<BR>通常来说,异常是因为程序中的错误所引起的,把错误找出来解决掉就行了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-08 08:11:37
<br>内容:我也知道啊,可我才接触进程啊,还没有办法检查出来。<BR>我看过了,错误应该在下这段代码里,应该怎样改呢?<BR>void CMptDlg::OnSpTm() <BR>{<BR> // TODO: Add your control notification handler code here<BR> LPDWORD lpDWord;<BR> HANDLE hProcess;<BR> if(!m_List.IsEmpty())<BR> {<BR> hProcess=m_List.GetTail();<BR> m_List.RemoveTail();<BR> ::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR> lpDWord));<BR> }<BR> <BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bottle_fish 回复日期:2003-11-10 14:17:20
<br>内容:这样改一下:<BR>void CMptDlg::OnSpTm() <BR>{<BR> // TODO: Add your control notification handler code here<BR> LPDWORD lpDWord;<BR> HANDLE hProcess;<BR> if(!m_List.IsEmpty())<BR> {<BR> hProcess=m_List.GetTail();<BR> ::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR> lpDWord));<BR> m_List.RemoveTail();<BR><BR> }<BR> <BR>}<BR>试试吧!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-10 15:18:13
<br>内容:首先感谢bottle_fish 提供的建议,不过没用啊,我试过了,效果一样,还是会弹出“该内存不能为"written"”的对话框。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bottle_fish 回复日期:2003-11-11 09:21:32
<br>内容:资源非法。<BR>三种情况:<BR>1.未创建<BR>2.提前释放<BR>3.获取资源失败<BR>你自己试试吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:redleaf 回复日期:2003-11-12 14:23:47
<br>内容:是你的GetExitCodeProcess函数使用不当造成的<BR><BR>看更改之后的代码
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-12 14:54:03
<br>内容:谢谢,按你的将LPDWORD lpDWord<BR>修改成DWORD word,果然就可运行了,不过我很奇怪,&word 与<BR>lpDWord不是一个意思吗?为什么就不行呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-12 15:03:34
<br>内容:我明白了,最主要原因是未给lpDWord赋空间,后来我将<BR>LPDWORD lpDWord<BR>改为LPDWORD lpDWord=new DWORD;<BR>最后加一句:<BR>delete lpDWord;<BR>也同样可以成功执行退出子进程的功能。<BR>再次感谢redleaf的帮助。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-11-12 18:11:48
<br>内容:嗯,楼主又学到一课。。。恭喜!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-11-13 08:03:44
<br>内容:谢谢,反正闲着也是闲着。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:若无 回复日期:2003-11-26 19:52:23
<br>内容: 其实象类似该内存不能为"written"的错误绝大多数都是指针使用不当造成引起的,修改这种BUG都成为本能反应了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -