当我的应用程序在Qt中崩溃时,如何执行一些清理/关闭操作?

当我的应用程序在Qt中崩溃时,如何执行一些清理/关闭操作?,qt,exception-handling,crash,device,Qt,Exception Handling,Crash,Device,我正在开发一个应用程序,它使用一个通过USB连接到pc的设备(微处理器)。我正在使用一个库,为这个微处理器提供一些特定的功能 在应用程序开始时,用户始终需要使用密码“登录”设备。这实际上是在微处理器中执行一些初始化功能,即: //microprocessor initialization functions open(); device_session = s; // a structure error=login(&s,password); //if password is ok o

我正在开发一个应用程序,它使用一个通过USB连接到pc的设备(微处理器)。我正在使用一个库,为这个微处理器提供一些特定的功能

在应用程序开始时,用户始终需要使用密码“登录”设备。这实际上是在微处理器中执行一些初始化功能,即:

//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)。使其再次工作的唯一方法是将设备重新连接到PC(硬件重置)

因此,我的问题是,即使在我的应用程序崩溃时,是否可以执行关闭函数,而不管错误的来源是什么。 我正在尝试覆盖QApplication::notify(),如下所述。这是正确的方法吗?

我考虑的另一种方法是有两个应用程序,AB

A处理微处理器初始化并将会话对象传递给B

B执行除关闭微处理器连接之外的所有其他操作。 当B关闭或崩溃时,A只执行关闭功能。这行吗

如果这个问题看起来很愚蠢,我很抱歉,但是我没有很多开发应用程序的经验。我试图在发布前搜索答案,但我不确定该采用什么方法,所以我不知道应该从什么开始搜索


非常感谢。

一般来说,崩溃和异常是两码事。使用多个进程是处理这种情况的一种合理方法,尽管根据您的操作系统可能还有其他进程。解决方案的可能重复之处是创建一个不会崩溃的应用程序。这应该作为一个答案发布。AFAIK,控制崩溃并可能从中恢复的唯一有效策略是围绕流程卫士设计应用程序。本质上,您可以在父进程中初始化应用程序,如果初始化过程成功,则可以将其余组件作为子进程启动。如果子进程崩溃,您可以尝试从这些崩溃中恢复,也可以调用清理过程。然而,process Guard不会修复错误代码,如果你的应用程序经常崩溃,那么你应该专注于实际修复导致崩溃的问题。