Если я правильно помню, Windows реализует, по крайней мере, некоторое подмножество POSIX, и поэтому «должен» иметь сигнальный интерфейс (такие вещи, как SIGKILL, SIGSEGV, SIGQUIT и т. Д.).
Я никогда не делал этого, кроме как на linux, но вы могли бы попытаться установить ловушку неожиданного завершения с помощью signal () (signal.h).
При быстром сканировании документов кажется, что при обработке сигнала можно сделать очень мало, возможно, что даже запуск нового процесса находится в списке запрещенных.
Теперь, когда я подумал об этом, я, вероятно, выбрал бы шаблон master / worker, очень простой родительский поток, который ничего не делает, но порождает работника (который выполняет весь пользовательский интерфейс / другие вещи). Если он не установил конкретный бит «Я сейчас умру», но все еще умирает (родительский процесс всегда получает сообщение / уведомление о том, что порожденный процесс умер), мастер запускает рабочего. Основная тема - держать мастера очень простым и трудно умереть из-за собственных ошибок.