如何在应用程序出口执行命令
C++ - How to execute a command on application exit?
我对c++非常陌生,最近开始了一个项目,我需要访问一个设备,收集某些数据并将其转发到本地网络上的数据流。
虽然我的应用程序做了所有需要的事情,但它缺少一个功能:当我关闭运行应用程序的窗口时,它不会停止硬件设备。结果是,每次完成程序后,我都必须进行一次硬件重置。这不仅不方便,而且不可能实现程序的预期用途。
我基本上只是想设置一个回调函数,即执行,当程序关闭时(通过点击x,按Alt-F4等)
这可能吗?为这些事件创建处理程序的可能性:
BOOL WINAPI ConsoleHandler(DWORD dwCtrlEvent)
{
switch (dwCtrlEvent)
{
case CTRL_CLOSE_EVENT:
// something
case CTRL_SHUTDOWN_EVENT:
// the same?
default:
return FALSE;
}
}
如果这是一个正确的方法,我想知道如何使用这个处理程序?我需要在我的程序中创建这样的处理程序并且不断更新吗?
我很感激任何帮助乔纳斯在这种情况下,正确使用RAII会对您有所帮助。
这基本上是说将资源所有权包装在对象内部。然后,您可以在程序开始时创建一个对象,并在程序结束时清理任何资源:
struct DeviceManager
{
DeviceManager() { InitDevice(); }
~DeviceManager() { DecativateDevice(); }
};
DeviceManager dm; //namespace scope, single translation unit
dm
将在程序启动时初始化,在进入main()
之前,并在程序结束时释放。
有一个标准库函数atexit,它允许您注册一个回调,以便在程序正常退出时调用。
要处理异常终止,可以使用异常处理程序。简单的try{}/catch{}块,在catch{}中或之后加上处理代码,对于大多数简单的程序应该足够了。对于高级设置,请参阅此处的结构化异常处理。
虽然您可以为各种关闭事件放入特殊处理程序,但您应该考虑以更面向对象的方式设计资源控制,使用所谓的RAII(资源获取即初始化)。这种设计模式涉及到有这样一个类,它的创建初始化底层设备,它的析构函数关闭并清理底层设备。因此,无论如何销毁该类的所有者,设备都将被关闭。
我将确保我的项目分为硬件驱动程序,保持硬件处于同一状态,以及向用户呈现数据的用户界面。
这样,当用户界面关闭时,驱动程序继续运行,清理,然后才结束。这也适用于UI被强制关闭时,例如在系统关闭时,或使用任务管理器时。
您可能需要查看UMDF以获取更多细节。
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在 Minecraft 服务器上执行命令
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 如何查看完整的CMD执行命令,包括参数和标志?
- CPP 中 z3 的编译和执行命令?
- 线程保持运行并执行命令
- 在 MinGW 和 MinGW-64 上执行命令后变量为空?
- popen() 将执行命令的输出写入 cout
- 如何在 Heroku 中的 Python 服务器上执行 "g++" 命令?
- 以普通用户身份执行命令
- 如何在生成之前在 cmake 中执行命令?
- 如何使用 c++ 在 cmd 中使用管理员权限执行命令
- 如何在Unix Shell中的后台执行命令
- 如何从连接的控制台执行命令
- 尝试在路由器上执行命令。C++ & libssh
- 在服务器上执行命令,然后将结果发送到Windows中的客户端
- 通过C编程打开终端并执行命令
- 在远程服务器上执行命令行命令
- 在Linux上使用c++执行命令时被阻止
- 使用popen执行命令