std::thread 开始、挂起和销毁
时间: 2023-12-22 14:28:25 浏览: 35
在C++11的线程库中,可以通过创建std::thread对象来启动一个线程。std::thread对象的构造函数接受一个可调用对象作为参数,该可调用对象将在新线程中执行。例如,以下代码将创建一个新线程并在其中执行函数foo:
```c++
void foo() {
// 线程执行的代码
}
std::thread t(foo); // 创建新线程并在其中执行foo函数
```
线程的执行将在std::thread对象的构造函数中开始。如果需要,可以使用std::thread对象的join()函数等待线程执行完成。例如,以下代码将创建一个新线程并等待该线程执行完成:
```c++
void foo() {
// 线程执行的代码
}
std::thread t(foo); // 创建新线程并在其中执行foo函数
t.join(); // 等待线程执行完成
```
如果不需要等待线程执行完成,可以使用std::thread对象的detach()函数将线程分离。例如,以下代码将创建一个新线程并将其分离:
```c++
void foo() {
// 线程执行的代码
}
std::thread t(foo); // 创建新线程并在其中执行foo函数
t.detach(); // 分离线程
```
分离线程后,std::thread对象将不再管理该线程,因此不能再调用join()函数等待线程执行完成。
当std::thread对象被销毁时,它将自动调用join()函数等待线程执行完成。如果线程已经被分离,std::thread对象的析构函数将不会等待线程执行完成。例如,以下代码将创建一个新线程并等待该线程执行完成,然后销毁std::thread对象:
```c++
void foo() {
// 线程执行的代码
}
{
std::thread t(foo); // 创建新线程并在其中执行foo函数
t.join(); // 等待线程执行完成
} // std::thread对象被销毁,将自动调用join()函数等待线程执行完成
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)