std::thread
简介
- 参考手册: std::thread
- 头文件 "#include \<thread>"
- 示例代码下载
c++标准库中提供两种方法来创建线程,分别为std::async
与std::thread
,本章主要介绍std::thread
的相关用法。
c++中通过std::thread
类来创建一个新的线程,传入一个可调用的对象
或函数,同时传入函数所需要的相关参数。
示例
创建线程
通过实例化std::thread
并传入相关的可调用函数及所需的参数来创建一
个新的线程,当线程创建完成之后就进入线程就绪队列等待运行。
void printValue(int j){
std::cout << j << std::endl;
}
//创建一个线程 t,运行 printValue,并传入'3'作为参数
std::thread t(printValue, 3);
等待线程完成
在线程t1
创建完成后,t1
实例便和正在运行的线程绑定在一起,必须在合适的地方调用std::thread::join()
来等待线程的完成或者调用std::thread::detach()
来分离线程。
当函数fun1
调用std::thread::join()
后,会导致fun1
阻塞,直到
线程完成并退出。
//等待线程 t 完成并退出
t.join();
//或者分离线程
//t.detach();
线程是否可以join
通过调用std:thread::joinable()
来判断线程是否可以join
或
detach
.
if (t.joinable()){
t.join();
//t.detach();
}
thread中的异常
-
thread对象退出作用域时,要检测
joinable
的状态,在状态为true
的时候退出作用域会抛出异常 -
当向
joinable
为true
的thread
对象赋值新的对象时,会导致 抛出异常