C++ 如何向std::thread传参
时间: 2024-08-12 19:10:07 浏览: 54
C++ 11 std::function和std::bind使用详解
在C++中,向`std::thread`传递参数可以通过以下几种方式:
1. **构造函数传参**:可以直接将参数作为`std::thread`构造函数的一部分。例如:
```cpp
#include <thread>
#include <iostream>
void printValue(int value) {
std::cout << "Value: " << value << std::endl;
}
int main() {
int data = 42;
std::thread worker(printValue, data); // 传递整数值
worker.join(); // 等待线程结束
return 0;
}
```
在这个例子中,`printValue`函数接收传入的数据`data`。
2. **函数指针或函数对象**:如果需要传递的是一个函数或函数对象,可以使用指向函数的指针或者lambda表达式:
```cpp
#include <thread>
#include <iostream>
void printFunction(int (*func)(int), int value) {
func(value);
}
int add(int a, int b) {
return a + b;
}
int main() {
std::thread worker(printFunction, &add, 5); // 使用函数指针
worker.join();
return 0;
}
```
或者使用lambda表达式:
```cpp
main() {
std::thread worker(printFunction, [](int x) { return x * 2; }, 10);
worker.join();
}
```
3. **std::ref()和std::move()`**:如果你想在主线程修改线程内部使用的变量,可以使用`std::ref()`或`std::move()`来传递引用或移动:
```cpp
void modifyVariable(int& value) {
value *= 2;
}
int main() {
int data = 5;
std::thread worker(modifyVariable, std::ref(data)); // 通过引用修改
worker.join();
std::cout << "After thread: " << data << std::endl; // 输出:10
return 0;
}
```
阅读全文