2014-07-18 129 views
2

我发现自己处于一种需要立即退出跨平台C++应用程序而不运行析构函数并且不会导致崩溃的情况。我怎样才能做到这一点?立即退出C++应用程序?

  • exit(0)运行析构函数;
  • quick_exit(0)未在VC++中实现;
  • abort()导致崩溃;
  • _Exit(0)在VC++中似乎没有实现(或者至少不会出现在MSDN中);
  • _exit(0)的文档不清楚它是否调用析构函数 - 显然,它在Windows下调用它们。

我相信我可以在非Windows平台下使用quick_exit,但是我缺乏VC++的解决方案。

澄清(因为人们问为什么我想避免析构函数)这是一个优化方案。我正在处理一个大型应用程序,它处理千兆字节的RAM,以复杂的图形分配,具有多个进程,多个线程,线程安全引用计数,看门狗等。内存管理/资源释放机制经过优化,可以保持应用程序的响应在运行期间使用和/或监视可能的错误(取决于构建标志),但是这些机制在关机过程中显然是过度的,保持CPU非常繁忙数秒钟,耗尽电池等 - 很长时间后,我们确信所有文件描述符/手柄已关闭。这会让用户感到不快,所以我正在尝试如何改进,最好不用重构所有的东西。

呼叫quick_exit是专门为这种情况设计的,但不支持VC++。所以我正在寻找该平台的替代品。

+2

“没有运行析构函数”:为什么要避免运行析构函数?他们经常做一些非常重要的工作(释放资源)。 – JBL

+3

如果您的C++程序在没有进行任何清理的情况下立即退出,那就是崩溃。 –

+1

您能否解释为什么*您想要这样做的理由?可能有其他解决方案? –

回答

0

使用在signal.h中定义的C signals它应该在大多数平台上得到支持。

你应该专门用SIGABRT或kill()调用raise()。

+1

'SIGABRT'信号与调用'abort'(它是这样实现的)具有相同的效果,并且将被视为操作系统崩溃(可能的核心转储,报告为苹果iOS应用崩溃。 ..)。 – prapin