C++ - 如何在应用程序退出时执行命令?

标签 c++ winapi eventhandler application-close function-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() 并在程序结束时释放。

关于C++ - 如何在应用程序退出时执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25122634/

相关文章:

c++ - 向 Code::Blocks 添加链接器选项

c++ - 如何以编程方式刷新通知区域图标页面

winapi - 防止生成 WM_SETCURSOR 和 WM_NCHITTEST 消息

c# - 如何覆盖 WPF C# 中的内置事件处理程序

c++ - ASCII 格式的 MPI 并行 IO(我该怎么做?)

C++从文件加载 "irregular"数据的最简单方法

c - 为什么 Windows CreateFile(<no share access>) 对我撒谎?

c++ - 如何在 C++ win32 中写入文件? (对比 2010)

c# - 如何在 lambda 方法中解开 lambda 事件处理程序?

c# - 抛出 NullReferenceException 但对象通过了 null 检查,这怎么可能?