c++ 学习之 多线程(二) thread的参数传递
前言
上一篇文章中讲了thread的四种构造函数,接下来给大家讲一讲thread的参数传递。
正文
1.初始化构造函数
利用初始化构造函数创建对象,第一个位置必须要传入一个可调用对象。c++ 中的可调用对象大概有这么几种:普通函数 ,类成员函数,类静态函数,仿函数,函数指针,lambda表达式,std::function。不了解可调用对象的可以戳这里,我写的另一篇关于可调用对象的文章。
(1)普通函数
用普通函数来初始化thread对象很简单,只需要把函数名传进去即可,函数中的参数按照顺序传入:
#include<stdio.h>
#include<thread>
void fun(int a,int b)
{
printf("%d\n",a+b);
}
int main()
{
int a =1;
int b =2;
std::thread t(fun,a,b);
t.join();
}
输出结果为 : 3
(2)类成员函数
类成员函数是有真正地址的,利用 &类名::函数名 可以拿到成员函数的地址。注意,最好先创建一个了类对象,不建议用临时对象。第二位参数传入该对象。
#include<stdio.h>
#include<thread>
class A
{
public:
void fun(int a,int b)
{
printf("%d\n",a+b);
}
};
int main()
{
int a =1;
int b =2;
A c;
std::thread t(&A::fun,c,a,b);
t.join();
}
输出结果为 : 3
(3)类静态成员函数
类静态成员函数不需要指定类对象。
#include<stdio.h>
#include<thread>