std::thread创建线程 时候把结构体如何传递给 新创建的线程
时间: 2023-07-26 14:34:41 浏览: 96
进程与线程的案例,有同步、前后台线程、线程相关属性、有参线程和无参线程等众多案例
在使用 `std::thread` 创建线程时,可以通过传递结构体指针或引用的方式将结构体数据传递给新创建的线程。下面是一个简单的示例:
```c++
#include <iostream>
#include <thread>
struct Data {
int a;
int b;
};
void printData(const Data& data) {
std::cout << "Data: a=" << data.a << ", b=" << data.b << std::endl;
}
int main() {
Data data = {10, 20};
std::thread t(printData, std::ref(data)); // 传递结构体引用
t.join(); // 等待线程执行完毕
return 0;
}
```
上述代码中,定义了一个名为 `Data` 的结构体,该结构体包含两个整型成员变量 `a` 和 `b`。在 `main` 函数中,定义了一个 `Data` 类型的变量 `data`,并将其初始化为 `{10, 20}`。然后,使用 `std::thread` 类创建了一个名为 `t` 的线程,该线程执行 `printData` 函数,并将 `data` 变量的引用作为参数传递给该函数。最后,调用 `t.join()` 等待线程执行完毕。
需要注意的是,如果要传递结构体的引用,需要使用 `std::ref` 函数将结构体变量包装为引用,否则会导致编译错误。在新创建的线程中,可以通过解引用结构体指针或引用来访问结构体的成员变量。
阅读全文