Dav*_*ler 4 c++ exception-handling
我想编写一个守护程序管理器来管理所有守护程序正在运行,就像这样(简化的伪代码):
void watchMe(filename)
{
while (true)
{
system(filename); //freezes as long as filename runs
//oh, filename must be crashed. Nevermind, will be restarted
}
}
int main()
{
_beginThread(watchMe, "foo.exe");
_beginThread(watchMe, "bar.exe");
}
Run Code Online (Sandbox Code Playgroud)
这部分已经工作 - 但是现在我面临的问题是,当观察到的应用程序 - 比如说foo.exe - 崩溃时,相应的系统调用会冻结,直到我确认这个漂亮的消息框:

这使守护进程无用.
我认为可能是一个解决方案是使观察到的程序(我控制)的main()"不可擦除",这样他们就可以优雅地关闭而不显示这个丑陋的消息框.
像这样:
try
{
char *p = NULL;
*p = 123; //nice null pointer exception
}
catch (...)
{
cout << "Caught Exception. Terminating gracefully" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它仍然会产生此错误消息:

("未经处理的异常...写入访问冲突......")
我已经尝试了SetUnhandledExceptionFilter和所有其他东西,但没有效果.
任何帮助将受到高度赞赏.
电贺
这似乎更像是SEH异常而不是C++异常,需要以不同方式处理,请尝试以下代码:
__try
{
char *p = NULL;
*p = 123; //nice null pointer exception
}
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
cout << "Caught Exception. Terminating gracefully" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这是一种补救措施,而不是治愈方法,您可能会更好地运行沙箱中的流程.