C++ 嵌套函数中的退出线程

C++ 嵌套函数中的退出线程,c++,multithreading,C++,Multithreading,我希望在必要时检查线程中的全局bool值: 如果是true,线程应该退出,如果是false,线程应该继续 检查时,我可以在单个函数中,也可以在嵌套函数中。我需要确保首先返回主函数,然后在主函数中返回0,这看起来非常愚蠢 所以我能想到的唯一方法就是在条件满足时抛出一个异常,然后在这个线程的末尾捕获它,这样所有的元素都被正确地破坏了 那么C++语言中有更标准的方法来实现吗?在嵌套函数中如何退出线程?您的方法很好。与线程创建和销毁的成本相比,抛出异常的成本可以忽略不计 如果出于某些原因不允许您使用异常

我希望在必要时检查线程中的全局
bool
值: 如果是
true
,线程应该退出,如果是
false
,线程应该继续

检查时,我可以在单个函数中,也可以在嵌套函数中。我需要确保首先返回主函数,然后在主函数中返回0,这看起来非常愚蠢

所以我能想到的唯一方法就是在条件满足时抛出一个异常,然后在这个线程的末尾捕获它,这样所有的元素都被正确地破坏了


那么C++语言中有更标准的方法来实现吗?在嵌套函数中如何退出线程?

您的方法很好。与线程创建和销毁的成本相比,抛出异常的成本可以忽略不计

如果出于某些原因不允许您使用异常:

  • 在代码中的多个位置检查信号变量。请注意,常规代码运行速度非常快,所以您只需要在长时间计算(循环)或可能阻塞的IO操作内/之前进行这些检查。确保代码的其余部分不依赖于某些未完成计算的结果

  • 使用始终从每个函数返回错误代码的编码样式(至少对于该线程)


有一些特定于系统的函数,如
ExitThread
pthread\u exit
,但不建议使用它们,因为它们会导致内存泄漏:如果线程是使用
std::thread
创建的,则不会调用析构函数,包括CRT/stdlib内部对象


< >答案是:没有,C++中没有标准的线程退出方法。只考虑线程是一个正则函数。

异常是执行非局部“GOTO”的标准方式。