在这种情况下,我需要立即退出跨平台的C++应用程序,而不运行析构函数,也不需要造成崩溃。我怎么能这么做?
exit(0)运行析构函数;quick_exit(0)没有在VC++中实现;abort()会导致崩溃;_Exit(0)似乎没有在VC++中实现(或者至少没有出现在MSDN中);_exit(0)的文档不清楚它是否调用析构函数--显然,它是在Windows下调用它们的。我相信我可以在非Windows平台下使用quick_exit,但我缺乏VC++的解决方案。
Clarification (因为人们问我为什么要避免析构函数),这是一个优化场景。我正在处理一个处理内存千兆字节的大型应用程序,该应用程序以复杂的图形分配,具有多个进程、多个线程、线程安全引用计数、看门狗等。内存管理/资源释放机制是为了在运行时使用和/或监视可能出现的错误(取决于构建标志)时保持应用程序响应而优化的,但这些机制在关闭过程中显然是过度消耗的,使CPU在关闭时非常忙碌,耗尽电池等等--在我们确信所有文件描述符/句柄关闭很久之后。这让用户不高兴,所以我正在试验如何改进这一点,最好不必重构所有内容。
调用quick_exit是专门为此类场景设计的,但不受VC++的支持。所以我在寻找平台的替代方案。
发布于 2014-08-01 16:10:12
使用在signal.h中定义的C 信号,它应该在大多数平台上得到支持。
具体而言,您应该使用SIGABRT或kill()调用()。
https://stackoverflow.com/questions/24821265
复制相似问题