未捕获C ++异常,程序终止并中止

时间:2019-08-07 14:53:15

标签: c++ multithreading exception stack-unwinding

该程序在捕获异常处理程序之前终止

"start": "npm install && npm run serve:ssr"

我想处理异常处理程序,但是程序在堆栈展开期间终止。我该怎么做才能确保在取消堆栈堆栈的过程中连接线程?

1 个答案:

答案 0 :(得分:1)

我认为在堆栈展开期间加入线程是一个坏主意。暂停析构函数直到将来发生不可控制的事件,这使得应用程序很难进行推理。

我相信,这是std::thread析构函数抛出而不加入线程的原因之一。

现在,您的问题。

第一个解决方案是超级简单-将std::thread包装在您自己的对象中,该对象将join称为析构函数。我认为,出于上述原因,这不是一个很好的方法。

第二个选项是执行另一个包装对象-一个将其线程中的析构函数分离的对象。我认为这更好,但是您显然有一个线程问题,该线程现在无法加入并等待完成。

为减轻这种情况,您可以扩展线程以通过您选择的任何机制来表示线程已完成,而不是等待该信号(从其他分离的线程发出信号)。但是,如果本地线程使用在堆栈展开期间将被破坏的对象,则仍然会遇到问题。对于这个问题,我认为没有好的解决方案。