2014-11-14 71 views
1

我有一个应用程序,应该运行清理代码,而不管过程如何结束。例如,如果程序由于重启而被OS关闭,则应执行清理代码。或者如果CTRL + C被按下,清理代码应该被执行。我发现了QCoreApplication::aboutToQuit信号。退出Qt清理?

用于信号状态的文档:

当应用程序要退出主事件循环,例如这个信号被发射当事件循环等级下降到零时。这个 可能发生在从应用程序 内部退出()或当用户关闭整个桌面会话时调用。

如果您的应用程序必须执行一些 最后一次清理,该信号特别有用。请注意,此 状态中不可能有用户交互。

但是经过测试,我注意到CTRL-C被按下时不会发出信号。当由kill终止时也不会发射。

关于什么'退出'事件是发出的信号?

我当前的观点是QCoreApplication::aboutToQuit对于处理外部信号并没有用处,它用于'从应用程序内'退出某种事件(用户单击X按钮关闭窗口),但不会即使在分段错误或外部死亡的过程中,如果要确保执行某个事件,也可以为您提供帮助。

+3

你是指什么样的清理?当一个进程终止时,它所分配的所有内存都被释放,所以除非你使用共享内存或其他进程间通信,否则你不应该做任何事情。另外,如果PC重新启动,您希望如何运行清理代码?这根本不可能。 – dtech 2014-11-14 13:11:24

+0

@ddriver例如。该应用程序设置iptables,并应该返回到原来的状态,如果发生什么事情。它还与一些外部系统进行通信,如果应用程序不向他们发送结束消息,它们将永远持续。 – TheMeaningfulEngineer 2014-11-14 13:17:41

+0

如@ddriver所述,您应该重新考虑您的方法,因为可能会发生一些(绝对不是)极端情况。话虽如此,这[维基文章](http://qt-project.org/doc/qt-5/unix-signals.html)可能会引起普遍关注。 – BaCaRoZzo 2014-11-14 13:20:08

回答