std::thread::join()
时间: 2023-07-14 21:07:01 浏览: 164
std::thread::join()是C++中std::thread类的成员函数之一。它用于等待一个线程的执行完成,直到该线程退出,或者等待超时。
当调用std::thread::join()时,当前线程会被阻塞,直到被调用的线程完成执行。这意味着在调用join()之前,必须先启动一个线程。join()函数可以用来确保主线程在子线程执行完成之后再继续执行。
如果调用std::thread::join()时,线程已经退出,那么join()会立即返回。
需要注意的是,如果一个std::thread对象被销毁而没有调用join(),会导致程序终止。因此,在使用std::thread时,通常需要在合适的地方调用join()或者detach()来避免此类问题。
相关问题
std::thread::join
std::thread::join是一个成员函数,用于等待线程的结束。在引用的代码中,d2.join()函数的作用是让主线程等待d2线程的执行完成,直到d2线程结束才能继续执行主线程的后续代码。具体来说,d2线程调用了join()函数,表示主线程要等待d2线程的任务完成才能继续执行。通过调用join()函数,可以避免主线程在d2线程还没有完成任务时退出,从而确保程序的正确执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [std::thread --join()](https://blog.csdn.net/shunlu5586/article/details/127783112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [c++11中关于std::thread的join的详解](https://download.csdn.net/download/weixin_38690079/12750322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [C++ std::thread join()函数调用](https://blog.csdn.net/baidu_28398971/article/details/126362262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
note: suggested alternative: ‘mem_fun’ std::for_each(template_threads.begin(), template_threads.end(), std::mem_fn(&std::thread::join));
这个错误提示建议你可以考虑使用`std::mem_fun`作为`std::for_each`的第三个参数,而不是使用`std::mem_fn`。
`std::mem_fun`也是一个函数对象,可以将一个成员函数转换为一个可调用对象。但与`std::mem_fn`不同的是,`std::mem_fun`是C++98标准引入的函数对象,可以在早期版本的C++编译器中使用。因此,如果你的编译器版本过低,可以尝试使用`std::mem_fun`替代`std::mem_fn`来解决问题。
使用`std::mem_fun`的示例代码如下:
```
std::for_each(template_threads.begin(), template_threads.end(), std::mem_fun(&std::thread::join));
```
这样做应该可以解决你遇到的问题。
阅读全文