Я разрабатываю приложение, в котором используется устройство (микропроцессор), подключенное к компьютеру через USB. Я использую библиотеку с некоторыми специфическими функциями для этого микропроцессора.
В начале приложения пользователь всегда должен «войти» в устройство, используя пароль. Что это действительно делает, так это выполняет некоторые функции инициализации в микропроцессоре, а именно:
//microprocessor initialization functions
open();
device_session = s; // a structure
error=login(&s,password); //if password is ok opens a session
start();
Когда пользователь закрывает приложение, мне также нужно закрыть устройство, выполнив:
//microprocessor closing functions
finish();
logout(&s); // it requires the session structure to close
close();
Я делаю это в деструкторе моего приложения.
Проблема в том, что, если мое приложение аварийно завершает работу, деструктор не выполняется и не являются закрывающими функциями. Поэтому при следующем запуске приложения происходит сбой функций инициализации, так как открывается другой сеанс, и я не могу закрыть его (поскольку для выхода из системы требуется s ). Единственный способ заставить его работать снова - это снова подключить устройство к ПК (аппаратный сброс).
Так что мой вопрос: возможно ли выполнить закрывающие функции даже в случае сбоя моего приложения, независимо от источника ошибки.
Я пытаюсь переопределить QApplication :: notify (), как описано здесь. Это правильный подход?
Qt / C ++ Обработка ошибок
Другой подход, который я рассматривал, состоит в том, чтобы использовать два приложения: A и B .
A обрабатывает инициализацию микропроцессора и передает объект сеанса в B .
B делает все остальное, кроме закрытия микропроцессорного соединения.
Когда B закрывается или падает, A просто выполняет функции закрытия. Может ли это работать?
Я прошу прощения, если вопрос кажется глупым, но у меня нет большого опыта разработки приложений. Я пытался найти ответ перед публикацией, но я не уверен, какой подход следует использовать, поэтому я не знаю, с чего мне начинать поиск.
Большое спасибо.