std::thread 怎么用
时间: 2023-10-15 19:24:02 浏览: 54
std::thread的使用方法有多种。可以传入lambda表达式、仿函数、全局函数等来创建线程。
1. 使用lambda表达式创建线程:
可以通过将lambda表达式作为参数传递给std::thread的构造函数来创建线程。下面是一个示例代码:
```cpp
#include <iostream>
#include <thread>
int main() {
std::thread t([](){
std::cout << "lambda thread" << std::endl;
});
t.join();
std::cout << "resume main thread" << std::endl;
return 0;
}
```
这段代码创建了一个名为t的线程,线程执行的任务是输出"lambda thread"。最后调用t.join()等待线程执行完毕,然后输出"resume main thread"。
2. 使用仿函数创建线程:
可以定义一个类,并重载函数调用运算符operator(),然后将该类的对象作为参数传递给std::thread的构造函数。下面是一个示例代码:
```cpp
#include <iostream>
#include <thread>
class background_task {
public:
void operator()() const {
std::cout << "functor thread" << std::endl;
}
};
int main() {
std::thread t {background_task()};
std::cout << "main thread" << std::endl;
t.join();
return 0;
}
```
这段代码创建了一个名为t的线程,线程执行的任务是调用background_task类的operator()函数并输出"functor thread"。最后输出"main thread"。
3. 使用全局函数创建线程:
可以定义一个全局函数,然后将该函数的名称作为参数传递给std::thread的构造函数。下面是一个示例代码:
```cpp
#include <iostream>
#include <thread>
#include <windows.h>
void myfunc_work() {
std::cout << "myfunc_work ....." << std::endl;
// do something 5s
Sleep(5000);
}
int main() {
std::thread t1(myfunc_work);
t1.join();
std::cout << "main thread ....." << std::endl;
return 0;
}
```
这段代码创建了一个名为t1的线程,线程执行的任务是调用myfunc_work全局函数并输出"myfunc_work"。最后输出"main thread"。
综上所述,std::thread可以通过传入lambda表达式、仿函数、全局函数等来创建线程。需要注意的是,在主线程中调用std::thread的join()方法可以等待线程执行完毕。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [C++:std::thread:线程用法](https://blog.csdn.net/u013620306/article/details/128565614)[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: 100%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)