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

Edw*_*sen 3 c++ multithreading c++11 stdthread

所以我遇到了一些似乎违背了目的std::thread或至少使它不那么方便的东西。

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

我可以:

A)将其设置为std::thread全局变量,这样它就不会超出范围。

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

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

Ap3*_*p31 5

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

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