我正在我的程序中创建多个线程。在按下 Ctrl-C
时,会调用一个信号处理程序。在信号处理程序中,我最后放了 exit(0)
。问题是有时程序会安全终止,但有时会出现运行时错误
abort() has been called
那么避免错误的可能解决方案是什么?
原文由 rjlion795 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在我的程序中创建多个线程。在按下 Ctrl-C
时,会调用一个信号处理程序。在信号处理程序中,我最后放了 exit(0)
。问题是有时程序会安全终止,但有时会出现运行时错误
abort() has been called
那么避免错误的可能解决方案是什么?
原文由 rjlion795 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
通常的方法是设置一个由所有线程(包括主线程)检查的 原子 标志(如
std::atomic<bool>
)。如果设置,则子线程退出,主线程开始join
子线程。 然后 你可以干净地退出。如果您使用
std::thread
作为线程,这可能是导致您崩溃的原因。您必须破坏join
std::thread
对象之前的线程。