Я хочу запрограммировать демон-менеджер, который позаботится о том, чтобы все демоны работали, например так (упрощенный псевдокод):
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");
}
Эта часть уже работает - но теперь я сталкиваюсь с проблемой, которая заключается в том, чтокогда наблюдаемое приложение - скажем, foo.exe - падает, соответствующий системный вызов останавливается, пока я не подтверждаю это красивое окно сообщения:
![error msg](https://i.stack.imgur.com/kltXz.jpg)
Это делает демона бесполезным.
То, что я думаю, может быть решением, состоит в том, чтобы сделать main () наблюдаемых программ (которые я контролирую) "нерасширяемыми", чтобы они корректно закрывались, не показывая это уродливое окно сообщения.
Примерно так:
try
{
char *p = NULL;
*p = 123; //nice null pointer exception
}
catch (...)
{
cout << "Caught Exception. Terminating gracefully" << endl;
return 0;
}
Но это не работает, так как по-прежнему выдает следующее сообщение об ошибке:
![error msg](https://i.stack.imgur.com/pH682.jpg)
("Необработанное исключение ... Записьнарушение прав доступа ... ")
Я пробовал SetUnhandledExceptionFilter и все остальное, но безрезультатно.
Любая помощь будет принята с благодарностью.
Приветсв