c++ - std::thread 不是全局变量,但在到达创建它的函数的末尾时不会超出范围?

标签 c++ multithreading c++11 stdthread

所以我遇到了一些似乎违背了 std::thread 目的的东西,或者至少让它不太方便。

假设我想生成一个 std::thread 来执行一次任务并且之后不想再担心它。我在函数末尾附近创建了这个 thread 因此 std::thread 很快就会超出范围,在我的例子中,很可能在 thread 仍在运行。这会产生一些解决方案(或者至少我知道的)的问题。

我可以:

A) 使 std::thread 成为全局变量,这样它就不会超出范围。

B) 在 std::thread 上调用 join(),这违背了生成线程的目的。

是否有其他更好的方法来处理这种情况?

最佳答案

你要的是std::thread::detach .

它将实际执行线程与 std::thread 对象分离,允许您在不加入线程的情况下销毁它。

关于c++ - std::thread 不是全局变量,但在到达创建它的函数的末尾时不会超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52196612/

相关文章:

c++ - 缺少 unique_ptr 和 friend operator= overload

c++ - 隐藏自动完成弹出窗口的最正确方法是什么?

c++ - 从作用域分配器适配器构造内部分配器

java - 生产者使用者代码问题(似乎Notify方法不会释放循环内的锁)

java - 将类实例作为线程单独运行

c++ - 使用 Visual C++ 的窗口窗体应用程序中的 Sleep()

visual-studio-2010 - Visual Studio 和 Visual C++ IDE 有什么区别

c++ - 跟踪打开的子对话框

c++ - C++ 类的重载运算符不会被调用

java - 使用 ThreadPoolExecutor 进行线程同步