Самый простой способ отловить сбой и завершить работу - использовать структурированный обработчик исключений во всей вашей основной функции.Это позволит отследить нарушения доступа, разделить на нули и другие серьезные ошибки, которые могут привести к сбою.Оттуда вы можете отобразить всплывающее окно, в котором указывается характер сбоя перед завершением процесса.
Обратите внимание, что SEH не позволяет запускать деструкторы.Обычно это плохо, но здесь вы все равно убиваете процесс, так что это не такая большая проблема.Однако любые блокировки, которые были приняты в конструкторе объекта, не будут освобождены после выполнения обработчика SEH.Мало того, но сами объекты больше не будут существовать, если бы они были размещены в стеке, предотвращая любую реальную очистку.
Опять же, вышеизложенное не является проблемой, так как ваш процесс находится в середине сбоя.Повреждение данных в настоящее время не имеет значения, так как процесс уже FUBARed.Все, что вам нужно сделать, это открыть окно с сообщением о том, что вы потерпели крах, сохранить любую информацию, которая вам абсолютно необходима (здесь не используйте блокировки, поскольку состояние блокировки теперь неопределенно), и завершить (не выходить)process (при выходе из системы отправляются уведомления об отключении процесса / потока, что может привести к взаимоблокировкам).
Это может быть расширено на все другие потоки, которые вы явно создаете, если потоки начнутся с общей точки входа, войдут в рамку SEH и впоследствии ответвляются к своим соответствующим задачам.