给应用程序加装“看门狗”

相信大多数的程序员或用户,在Windows中见到类似于下面的亲切而又温馨的提示信息,都不会感到陌生:

“XXX执行了非法操作,将被关闭。要终止程序,请单击 <确定> ;要调试程序,请单击 <取消> 。”或者,“是否向Microsoft发送错误报告? <发送> , <不发送> 。”

如果这个程序运行在无人值守、需要保持连续工作状态的场合,而其中的bug又一时难以排除,就需要采取应急措施,消除或减少程序出错造成的影响。本文讨论解决这个问题的办法。

做过一定硬件开发的人都知道,恶劣的工作环境,带有缺陷的硬件设计,不完善的算法等内外因素,都可能造成程序“跑飞”,因此专门加装一个“看门狗”,负责监视程序主体,必要时产生复位中断,有效地避免设备当机。

“看门狗”的思想,完全可以拿到高级语言编程中来用。基本做法是:设计一个简单的监视程序做为主进程,将原来的工作程序作为子进程,由主进程启动子进程并监视子进程的运行状态。子进程在发生严重错误时不弹出本文开始时描述的对话框,而是悄悄退出。主进程发现子进程退出后,重新启动子进程。如此反复。

在具体实现上,下面以VC为例说明:

设置子进程为“静默模式”

在系统初始化部分(CWinApp或main中的开头),调用API函数SetErrorMode

SetErrorMode(SEM_NOGPFAULTERRORBOX);

保证程序在发生严重错误时不弹出对话框,无需人工干预,自行退出。

启动子进程

在主进程中,创建子进程并运行。假定子进程的可执行文件为work.exe,示意性代码如下

STARTUPINFO si;
PROCESS_INFORMATION pi;
 
Zero
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值