我是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;
}
}
如果这是一种正确的方法,我想知道如何使用这个处理程序?我是否需要在我的程序中创建这样的处理程序并且不断更新?
我很感激任何帮助 纳斯
答案 0 :(得分:7)
在这种情况下,适当的RAII使用会对您有所帮助。
这基本上就是说将资源所有权包装在对象中。然后,您可以在程序启动时创建一个对象,并在程序结束时清除所有资源:
struct DeviceManager
{
DeviceManager() { InitDevice(); }
~DeviceManager() { DecativateDevice(); }
};
DeviceManager dm; //namespace scope, single translation unit
在进入dm
之前, main()
将在程序启动时初始化,并将在程序结束时发布。
答案 1 :(得分:0)
虽然您可以为各种关闭事件添加特殊处理程序,但您应该考虑使用所谓的RAII(资源获取是初始化)以更面向对象的方式设计资源控制。这种设计模式涉及一个类,其创建初始化底层设备,其析构函数关闭并清理底层设备。因此,无论该类的所有者如何被销毁,该设备都将被关闭。
答案 2 :(得分:0)
我确保将我的项目拆分为硬件驱动程序,使硬件保持理智状态,并将用户界面呈现给用户。
这样,当用户界面关闭时,驱动程序继续运行,清理然后才结束。当UI被强制关闭时,这也可以工作,例如,在系统关闭时,或使用任务管理器。
您可能需要查看UMDF了解更多详情。
答案 3 :(得分:0)