怎么开启线程?有什么方式开启多线程?
时间: 2024-04-11 12:27:54 浏览: 20
在C++中,可以使用标准库提供的 `<thread>` 头文件来开启线程。以下是几种常见的开启多线程的方式:
1. 使用函数作为线程入口点:可以使用 `std::thread` 类来创建一个新线程,并将函数作为线程的入口点。
```cpp
#include <iostream>
#include <thread>
void threadFunction() {
std::cout << "这是一个新线程" << std::endl;
}
int main() {
std::thread myThread(threadFunction); // 创建一个新线程,并指定函数作为入口点
myThread.join(); // 等待新线程执行完成
return 0;
}
```
在上述示例中,我们定义了一个名为 `threadFunction` 的函数,并使用 `std::thread` 类创建了一个新线程 `myThread`,将 `threadFunction` 函数作为线程的入口点。使用 `join()` 方法等待新线程执行完成。
2. 使用函数对象(仿函数)作为线程入口点:可以使用函数对象(仿函数)作为线程的入口点。函数对象是一个类对象,重载了 `operator()` 运算符。
```cpp
#include <iostream>
#include <thread>
class ThreadFunctor {
public:
void operator()() {
std::cout << "这是一个新线程" << std::endl;
}
};
int main() {
ThreadFunctor functor;
std::thread myThread(functor); // 创建一个新线程,并指定函数对象作为入口点
myThread.join(); // 等待新线程执行完成
return 0;
}
```
在上述示例中,我们定义了一个名为 `ThreadFunctor` 的类,并在类中重载了 `operator()` 运算符。然后,我们创建了一个类对象 `functor`,并将其传递给 `std::thread` 类的构造函数。
3. 使用 lambda 表达式作为线程入口点:使用 lambda 表达式可以更简洁地定义线程的入口点。
```cpp
#include <iostream>
#include <thread>
int main() {
std::thread myThread([]() {
std::cout << "这是一个新线程" << std::endl;
}); // 创建一个新线程,并指定 lambda 表达式作为入口点
myThread.join(); // 等待新线程执行完成
return 0;
}
```
在上述示例中,我们直接在 `std::thread` 类的构造函数中使用了一个 lambda 表达式作为线程的入口点。
无论使用哪种方式,都需要包含 `<thread>` 头文件,并在创建线程后使用 `join()` 方法等待线程执行完成。另外,还可以使用其他方法来控制线程的同步和并发操作,如互斥锁、条件变量等。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)