⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_59387.htm

📁 vc
💻 HTM
字号:
<p>
序号:59387 发表者:最后一根稻草 发表日期:2003-11-07 14:26:38
<br>主题:进程中止时的异常情况该怎样处理
<br>内容:这两天刚接触到进程的问题,发现在终止一个子进程时经常有异常情况,我用的子进程是windows自带的计算器。怎样才能使子进程正常退出呢。请高手指点。以下是部分代码。<BR><BR>void CMptDlg::OnSp() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_Pr!=&#34; &#34;)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *buf;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;infoStart,0,sizeof(infoStart));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;infoStart.cb=sizeof(STARTUPINFO);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf=m_Pr.GetBuffer(100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateProcess(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,buf,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,NULL,&amp;infoStart,&amp;infoProcess);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_List.AddTail(infoProcess.hProcess);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>void CMptDlg::OnSpTm() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDWORD lpDWord;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hProcess;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_List.IsEmpty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hProcess=m_List.GetTail();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_List.RemoveTail();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpDWord));<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<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!=&#34; &#34;)<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>&#34;0x77e7eee7&#34;指令引用的&#34;0xcccccccc&#34;内存。该内存不能为&#34;written&#34;.<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>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDWORD lpDWord;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hProcess;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_List.IsEmpty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hProcess=m_List.GetTail();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_List.RemoveTail();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpDWord));<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDWORD lpDWord;<BR>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hProcess;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_List.IsEmpty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hProcess=m_List.GetTail();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::TerminateProcess(hProcess,GetExitCodeProcess(infoProcess.hProcess,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpDWord));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_List.RemoveTail();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<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 提供的建议,不过没用啊,我试过了,效果一样,还是会弹出“该内存不能为&#34;written&#34;”的对话框。
<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>内容:&nbsp;&nbsp; 其实象类似该内存不能为&#34;written&#34;的错误绝大多数都是指针使用不当造成引起的,修改这种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 + -