Shutdown Hook c ++

时间:2011-08-07 18:30:10

标签: c++ hook exit shutdown termination

有没有办法在终止时运行代码,无论什么样的终止(异常,正常,未捕获的异常等)? 我知道它实际上可以用Java,但它甚至可以在C ++中使用吗?我假设一个Windows环境。

4 个答案:

答案 0 :(得分:5)

否 - 如果某人调用TerminateProcess,您的流程将在没有进一步调整的情况下销毁,并且(特别是)在关闭过程中没有任何机会再运行任何代码。

答案 1 :(得分:2)

对于正常结账申请,我建议

atexit()

答案 2 :(得分:1)

解决问题的一个好方法是使用C ++ RAII习语,这意味着清理操作可以放在对象的析构函数中,即

class ShutdownHook {
  ~ShutdownHook() { 
    // exit handler code 
  }
}; 

int main() { 
  ShutdownHook h; 
  //...
} 

请参阅ACE库中的Object Lifetime Manager。在链接文档中,他们也讨论了atexit函数。

答案 3 :(得分:0)

不适用于任何终止;有些信号是为了不被处理而设计的,比如Linux上的KILL。

这些信号旨在终止耗尽所有内存,CPU或其他资源的程序,并使计算机处于难以运行处理程序功能的状态。