Освободить ресурс в случае креша?
От: adb Россия  
Дата: 11.02.22 15:07
Оценка:
Есть мультиплатформенное, мультитред приложение.

Хочется в случаях крешей освобождать один ресурс (по сути доступ к лицензии, она конечно сама отлипает, но минут через 30).
В ходе разных экспериментов выяснилось, что нет никаких проблем под линуксом или маком.
Можно использовать тот же std::set_terminate/std::signal.

Но на видне все это работает только в пределах одного треда. Создание треда я не контролирую (используем QT, Qt::ThreadPool, etc).
Пробовал SetUnhandledExceptionFilter, но срабатывает не всегда. Компиляция происходит с флагом /EHsc и менять наверно будет не совсем правильно.

__try __finally в main не дает эффекта, если упали в треде.
Плюс Qt на своих ассертах делает fast exit (заодно хоть узнал, что за зверь. По виду костыль очередной), хотя это я залечил с помощью qInstallMessageHandler. Но лечение больше похоже на костыль.

Вопрос есть ли какой-нибудь универсальный метод обработки завершения приложения при креше?
Перелопатил пол гугла, а решения так и не нашел.

Максимум, что нашел — использование dll с флагами ATTACH_THREAD для доступа к треду при его создании, но dll у меня нет, создавать ради хендлера не очень хочется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.