2014-11-14 107 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

回答