是有一些方法来运行终止代码,不管是什么样的终止(异常,正常,未捕获的异常等)? 我知道它实际上可能在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/)。 –