std::thread thread_send;如何创建线程
时间: 2024-08-26 22:00:34 浏览: 27
在C++标准库中,`std::thread` 是用于创建新线程的一个类。为了创建一个新的线程并开始执行某个函数,你可以按照以下步骤操作:
1. 包含头文件:首先,你需要包含 `<thread>` 头文件,它包含了 `std::thread` 类的声明。
```cpp
#include <thread>
```
2. 定义要在线程中运行的函数:这个函数将成为新线程的目标。例如,你可以定义一个名为 `send_data` 的函数。
```cpp
void send_data() {
// 线程需要执行的具体任务
}
```
3. 创建线程实例:使用 `std::thread` 类,将目标函数作为参数传递给构造函数。
```cpp
std::thread thread_send(send_data);
```
这行代码会创建一个新的线程,并立即尝试启动 `send_data` 函数。如果函数尚未准备好执行,可能会阻塞直到函数可以被调度。
4. 启动线程:如果不直接启动,可以使用 `start()` 或 `detach()` 方法,这里通常我们默认构造函数会自动启动线程。
```cpp
// 如果你想显式地启动线程
thread_send.start();
```
5. 等待线程结束:如果你想等待线程完成再继续主线程的操作,可以使用 `join()` 函数。但在这个例子中,由于线程已经启动,`join()` 可能不需要。
```cpp
// 这里省略了 join()
// thread_send.join(); // 如果需要,你可以添加这行代码来等待线程结束
```
6. 错误处理:别忘了考虑异常处理,因为创建线程也可能抛出错误。
完整的示例代码:
```cpp
#include <iostream>
#include <thread>
void send_data() {
std::cout << "Thread is sending data...\n";
}
int main() {
try {
std::thread thread_send(send_data); // 创建线程
// 如果你想在这里等线程结束,可以加上 join():
// thread_send.join();
std::cout << "Main thread continues...\n";
} catch (const std::exception& e) {
std::cerr << "Error creating thread: " << e.what() << '\n';
}
return 0;
}
```