我正在开发一个应用程序,它使用通过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(),如此处所述。这是正确的方法吗? Qt/C++ Error handling
我考虑的另一种方法是有两个应用程序, A 和 B 。
A 处理微处理器初始化并将会话对象传递给 B 。
除了关闭微处理器连接外,B 执行其他所有操作。 当 B 关闭或崩溃时, A 只会执行结算功能。这可行吗?
如果问题看起来很愚蠢,我很抱歉,但我在开发应用程序方面没有太多经验。我在发布之前试图寻找答案,但我不确定要遵循什么方法,所以我不知道我应该开始搜索什么。
非常感谢。