Я пытаюсь поймать все неожиданные завершения в моем процессе.
Я использовал эти функции, чтобы поймать все необработанные ошибки и исключения, которые я могу придумать, но этого недостаточно:
SetUnhandledExceptionFilter(OnUnhandledNativeException);
set_terminate(set_terminateHandler);
set_unexpected(set_unexpectedHandler);
_set_purecall_handler(set_purecallHandler);
_set_new_handler(HandleProgramMemoryDepletion);
_set_invalid_parameter_handler(InvalidParameterHandler);
signal(SIGABRT, sigabrt_handler);
signal(SIGINT, sigabrt_handler);
signal(SIGTERM , sigabrt_handler);
Эти функции ловят практически любую ошибку в приложении.
Но когда приложение завершается из-за сбоя GDI (например, у GDI не хватает ресурсов), ни одна из этих функций не вызывается.
Кто-нибудь знает, как я могу перехватывать события ошибок GDI?
Я уверен, что должен быть какой-то способ перегрузить его и изменить функцию обратного вызова.
И знает ли кто-нибудь о каких-либо других странных сценариях, когда этих функций просто недостаточно?
Примечание.
Точной ошибкой, которую он не перехватывает, является "Необходимый ресурс был недоступен".
Это вызвано тем, что вы создаете много объектов GDI и не выпускаете их.
Программа аварийно завершает работу, потому что их недостаточно ресурсов задолго до того, как закончится память.