C++一个函数调用另一个带自定义参数函数,如何给另一个函数开启线程
时间: 2024-03-21 08:38:29 浏览: 66
可以使用C++11中的std::thread来实现开启线程。
首先,在调用函数时需要使用lambda表达式将函数和参数进行封装,例如:
```c++
#include <iostream>
#include <thread>
void func(int arg1, char arg2) {
std::cout << "arg1 = " << arg1 << ", arg2 = " << arg2 << std::endl;
}
int main() {
int arg1 = 123;
char arg2 = 'A';
std::thread t([&](){ func(arg1, arg2); });
t.join();
return 0;
}
```
上述代码中,使用lambda表达式将func函数和参数进行封装,然后使用std::thread创建一个线程,并在lambda表达式中调用func函数。
需要注意的是,lambda表达式中使用了&符号,表示将当前作用域中的arg1和arg2变量传递给lambda表达式,以便在lambda表达式中使用。同时,在lambda表达式中调用func函数时,需要使用()运算符将参数传递给func函数。
最后,调用std::thread的join函数等待线程执行完毕。
如果需要多次调用func函数并开启多个线程,可以使用循环来实现,例如:
```c++
#include <iostream>
#include <thread>
void func(int arg1, char arg2) {
std::cout << "arg1 = " << arg1 << ", arg2 = " << arg2 << std::endl;
}
int main() {
for (int i = 0; i < 5; i++) {
int arg1 = 123 + i;
char arg2 = 'A' + i;
std::thread t([&](){ func(arg1, arg2); });
t.join();
}
return 0;
}
```
上述代码中,使用循环调用func函数,并开启多个线程执行。需要注意的是,在每次循环中都需要重新定义lambda表达式,并使用不同的参数调用func函数。
阅读全文