退出嵌套函数中的线程

时间:2015-11-12 00:41:54

标签: c++ multithreading

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

在检查时,我可以在单个函数内部,或者我可以在嵌套函数中。我需要确保首先返回main函数,然后在main函数中返回return 0,这似乎非常愚蠢。

因此,我能想到的唯一方法是在满足条件时throw异常,然后在该线程的末尾捕获它,以便正确地破坏所有元素。

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

2 个答案:

答案 0 :(得分:2)

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

如果由于某些原因您不允许使用例外:

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

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

答案 1 :(得分:1)

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

所以答案是:不,没有标准的方法来退出C ++中的线程。只需将线程视为常规函数。