C++ 线程开启 带参数
时间: 2023-09-09 16:08:17 浏览: 51
在 C++ 中开启线程并传递参数的一种常用方法是使用 lambda 表达式。具体来说:
- 声明一个线程对象,并将一个函数对象作为参数传递给它,如下所示:
```
std::thread my_thread(my_function, arg1, arg2, ...);
```
其中 my_function 是要在新线程中执行的函数,arg1、arg2 等是函数参数。
- 可以使用 lambda 表达式来创建一个函数对象,该函数对象可以在新线程中执行。这样可以轻松地将参数传递给新线程,如下所示:
```
std::thread my_thread([arg1, arg2, ...]() {
// 在新线程中执行的代码,可以使用 arg1、arg2 等参数
});
```
在 lambda 表达式中,方括号内是要捕获的变量列表,圆括号内是函数参数列表,大括号内是函数体。在本例中,方括号内为空,表示不捕获任何外部变量;圆括号内为空,表示不接受任何参数;大括号内是要在新线程中执行的代码,可以使用 arg1、arg2 等参数。
- 如果要在 lambda 表达式中使用引用类型的参数,可以使用 std::ref() 函数来包装参数,如下所示:
```
void my_function(int& arg) {
// 修改 arg 的值
}
int main() {
int my_arg = 42;
std::thread my_thread([&my_arg]() {
my_function(std::ref(my_arg));
});
my_thread.join();
return 0;
}
```
在本例中,my_arg 是要传递给新线程的参数,它被包装在一个 lambda 表达式中,并通过 std::ref() 函数传递给 my_function() 函数。由于 my_function() 函数接受一个引用类型的参数,因此需要使用 std::ref() 函数来包装 my_arg,以便在 lambda 表达式中传递引用。