Как выполнить некоторые операции очистки / закрытия при сбое моего приложения в Qt? - PullRequest
0 голосов
/ 03 мая 2018

Я разрабатываю приложение, в котором используется устройство (микропроцессор), подключенное к компьютеру через 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 просто выполняет функции закрытия. Может ли это работать?

Я прошу прощения, если вопрос кажется глупым, но у меня нет большого опыта разработки приложений. Я пытался найти ответ перед публикацией, но я не уверен, какой подход следует использовать, поэтому я не знаю, с чего мне начинать поиск.

Большое спасибо.

...