让程序异常退出后自动重启

“程序 FreeEIM.exe 遇到问题异常退出,是否重启?”,类似的情况我们似乎碰见过,很多程序都有这个功能;这是怎么实现的呢?经 
过一番努力,在MSDN找到了SetUnhandledExceptionFilter函数,利用它,可以实现这个功能。其实这个过程叫做SEH("Structured Exception

Handling")结构化异常处理。是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。我在这里简单的说一下如何使用,如有错

误,请高手不吝指正。

有了它,太好了。要是你的程序无缘无故荡掉了,你可以利用它,帮你的程序重启。

一,处理函数
程序在出现异常时,会调用这个函数,我们就在这里处理程序荡后的所有事,包括重启。
原型:LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo);
我们这里先简单试验一下。

LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
MessageBox(NULL,"FreeEIM","FreeEIM",MB_OK);
return EXCEPTION_EXECUTE_HANDLER;
}// 此代码可以 COPY - PASTE 使用。

然后在OnInitDialog()里加入:

SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);// 此代码可以 COPY - PASTE 使用。
int *i=0;// 此代码可以 COPY - PASTE 使用。
*i=0;// 此代码可以 COPY - PASTE 使用。

编译看看有什么结果。

二,如何重启
重启也不难,这里我们用到一个函数WinExec,函数比较常用,不熟悉的上GOOGLE找一下。

LONG WINAPI FreeEIM_UnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)
{
char szFileName;
::GetModuleFileName(NULL, szFileName, _MAX_PATH);
if ( MessageBox(NULL,"程序 FreeEIM.exe 遇到问题异常退出,是否重启?","FreeEIM",MB_YESNO)
== IDYES )
WinExec(szFileName, SW_SHOW);

return EXCEPTION_EXECUTE_HANDLER;
}// 此代码可以 COPY - PASTE 使用。

然后在OnInitDialog()里加入:

SetUnhandledExceptionFilter(FreeEIM_UnhandledExceptionFilter);// 此代码可以 COPY - PASTE 使用。
int *i=0;// 此代码可以 COPY - PASTE 使用。
*i=0;// 此代码可以 COPY - PASTE 使用。

编译一下,一个简单的异常重启程序就实现了
内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值