是有一些方法來運行終止代碼,不管是什麼樣的終止(異常,正常,未捕獲的異常等)? 我知道它實際上可能在Java中,但它甚至可能在C++中?我假設一個Windows環境。關閉掛鉤C++
Q
關閉掛鉤C++
5
A
回答
5
2
對於正常閉合applciation我建議
atexit()
1
的一個好方法是使用C++ RAII成語,其在此是指清理操作可以放置在對象的析構函數,即
class ShutdownHook {
~ShutdownHook() {
// exit handler code
}
};
int main() {
ShutdownHook h;
//...
}
參見ACE庫Object Lifetime Manager。在鏈接的文檔中,他們也討論了atexit
函數。
+0
我在上文中假設的出口是「正常「,即不通過例如'退出()'呼叫,或由於分段故障等。 –
+1
小心。這不能保證工作。如果一個異常轉義了main(),那麼在實現中定義了堆棧是否展開。因此,要保證這個工作,你必須捕獲main()中的所有異常(將你的代碼放在try塊中)。你不需要做任何事情,只需重新拋出異常後的字眼。 –
0
不爲任何類型的終止;有些信號被設計爲不能被處理,比如Linux上的KILL。
這些信號被設計用來終止佔用了所有內存或CPU,或其他一些資源的程序,並已離開的狀態,使得它難以運行的處理函數的計算機。
相關問題
- 1. 當關閉掛鉤破壞
- 2. 的Java/Scala的關閉掛鉤-noclassdeffounderror
- 3. 掛鉤Quartz.net中的關閉方法
- 4. Java關閉掛鉤未運行
- 5. 關閉掛鉤的最佳地點
- 6. Django預關機掛鉤關閉掛pymongo連接
- 7. log4j2無法註冊關閉掛鉤,因爲JVM正在關閉
- 8. 關於API掛鉤
- 9. Tomcat關機掛鉤
- 10. 掛鉤C函數
- 11. WH_JOURNALPLAYBACK掛鉤在C#
- 12. 掛鉤或不掛鉤 - git
- 13. API無掛鉤掛鉤
- 14. nodejs killall關機掛鉤
- 15. Java關機掛鉤問題
- 16. Rails的關閉鉤
- 17. C++ JournalPlayback和Bluescreen 0x0000008E(掛鉤)
- 18. C++ __usercall在IDA掛鉤
- 19. C#SetSystemTime(WIN API)掛鉤
- 20. C掛鉤/回撥系統
- 21. 在C和windows中掛鉤
- 22. 掛鉤新/刪除C++
- 23. 當播放應用程序正在關閉時停止掛鉤
- 24. 如何使用黃瓜掛鉤關閉多個Firefox窗口?
- 25. Java進程在關閉掛鉤後何時死亡?
- 26. Google Cloud Dataflow - Apache Beam - 管道關閉掛鉤
- 27. Apache的駱駝任何關閉掛鉤交流
- 28. 如何在saveSave之後關閉日誌saveSave掛鉤後解析
- 29. 關閉掛鉤可以用於稍長的任務
- 30. 確保交易都在關閉掛鉤...示例代碼檢查
它是不可能在Java中任 - 不管語言的所有進程不能趕上Linux(和Windows上的等效)信號-9或當信號到達 – Soren
由於@Drake建議運行任何代碼,我會去[的atexit](http://www.cplusplus.com/reference/cstdlib/atexit/)。 –