c++中线程内调用的函数有传入参数
时间: 2024-09-14 07:15:58 浏览: 63
在C++中,当你创建一个线程并希望在线程的执行函数中使用参数,你可以通过线程函数的参数列表来传递这些参数。这通常通过两种方式来实现:使用std::thread或者使用std::bind和std::function。
第一种方式,使用std::thread时,你可以直接将参数作为std::thread构造函数的参数传入,这些参数会被转发给线程函数。如果参数是通过值传递的,那么它们会直接被复制给线程函数;如果是通过引用传递的,则需要使用std::ref或std::cref来包装参数,以避免复制并且传递引用。
示例代码如下:
```cpp
#include <thread>
void threadFunction(int value, std::string& reference) {
// 使用value和reference进行操作
}
int main() {
int a = 10;
std::string s = "Hello World";
std::thread myThread(threadFunction, a, std::ref(s)); // a是值传递,s是引用传递
myThread.join();
return 0;
}
```
第二种方式,使用std::bind可以更灵活地绑定函数和参数,包括绑定成员函数和成员变量、自由函数和普通变量,以及设置默认参数等。绑定后的结果可以被std::thread使用。
示例代码如下:
```cpp
#include <thread>
#include <functional>
class MyClass {
public:
void memberFunction(int x) {
// ...
}
};
void freeFunction(int x, std::string& y) {
// ...
}
int main() {
MyClass obj;
std::string str = "Example";
auto boundFunction = std::bind(freeFunction, 5, std::ref(str));
std::thread myThread(boundFunction);
std::thread myMemberThread(std::bind(&MyClass::memberFunction, &obj, 10));
myThread.join();
myMemberThread.join();
return 0;
}
```
在这两个示例中,线程函数都接受参数,第一个示例中是直接传递给std::thread构造函数,第二个示例中是通过std::bind创建一个绑定函数后再传递给std::thread。
阅读全文