C++ 多线程操作
一. 函数对象创建线程
#include <iostream>
#include <pthread.h>
using namespace std;
void func()
{
cout << "strat" <<endl;
cout << "end" <<endl;
}
int main()
{
thread m_thread(func);
m_thread.join();
cout << "zzz" <<endl;
return 0;
}
二. 用类对象创建线程
1.
#include <iostream>
#include <pthread.h>
using namespace std;
// 类要变成可调用对象需要重载操作符()
class T
{
public:
void operator()() //不能带参数,代码从这开始执行
{
cout<<"start"<<endl;
//...
cout<<"end"<<endl;
}
}
int main()
{
T t;
thread m_thread(t);
m_thread.join();
cout << "zzz" <<endl;
return 0;
}
2.
#include<iostream>
#include<pthread.h>
// 类要变成调用对象需要重载操作符
class T
{
public:
int m;
T(int i):m(i)
{
}
void operator()() //不能带参数 代码从这开始
{
cout << "start" << endl;
//...
cout << "end" << endl;
}
};
int main()
{
int m = 6;
T t(m);
thread m_thread(t);
m_thread.join();
cout << "zzz" << endl;
}
三. 将类中的某个函数作为线程的入口地址
class T
{
public:
void GetMsg()
{
}
void SaveMsg()
{
}
}
T t;
// 第一个是取址 第二个是引用
thread obj1(&T::GetMsg, &t);
thread obj2(&T::SaveMsg, &t);
obj1.join();
obj2.join();
四. lambda 表达式创建线程
#include<iostream>
#include<pthread.h>
using namespace std;
int main()
{
auto m_lambda = []
{
cout << "start" << endl;
}
thread m_thread(m_lambda);
m_thread.join();
cout << "zz" <<endl;
}