C++ thread 实现参考
Posted 洪流之源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ thread 实现参考相关的知识,希望对你有一定的参考价值。
参考1:
#include <thread>
#include <iostream>
class Wrapper
public:
void member1()
std::cout << "i am member1" << std::endl;
void member2(const char *arg1, unsigned arg2)
std::cout << "i am member2 and my first arg is (" << arg1 << ") and second arg is (" << arg2 << ")" << std::endl;
std::thread member1Thread()
return std::thread(&Wrapper::member1, this);
std::thread member2Thread(const char *arg1, unsigned arg2)
return std::thread(&Wrapper::member2, this, arg1, arg2);
;
int main()
Wrapper *w = new Wrapper();
std::thread tw1 = w->member1Thread();
tw1.join();
w->member2Thread("hello", 100).detach();
return 0;
join()为主线程等待子线程的阻塞模式
detach()为主线程不管子线程的非阻塞模式
参考2:
①创建一个类,并编写圆括号重载函数,初始化一个该类的对象,把该对象作为线程入口地址
class Ta
public:
void operator()()
cout << "我的线程开始运行" << endl;
//-------------
//-------------
cout << "我的线程运行完毕" << endl;
;
//main函数里的:
Ta ta;
thread myThread(ta);
myThread.join();
②lambda表达式创建线程
//main函数中
auto lambdaThread = []
cout << "我的线程开始执行了" << endl;
//-------------
//-------------
cout << "我的线程开始执行了" << endl;
;
thread myThread(lambdaThread);
myThread.join();
③把某个类中的某个函数作为线程的入口地址
class Data_
public:
void GetMsg()
void SaveMsh()
;
//main函数里
Data_ s;
//第一个&意思是取址,第二个&意思是引用,相当于std::ref(s)
//thread oneobj(&Data_::SaveMsh,s)传值也是可以的
//在其他的构造函数中&obj是不会代表引用的,会被当成取地址
//调用方式:对象成员函数地址,类实例,[成员函数参数]
//第二个参数可以传递对象s,也可以传递引用std::ref(s)或&s
//传递s,会调用拷贝构造函数在子线程中生成一个新的对象
//传递&,子线程中还是用的原来的对象,所以就不能detach,因为主线程运行完毕会把该对象释放掉
thread oneobj(&Data_::SaveMsh,&s);
thread twoobj(&Data_::GetMsg,&s);
oneobj.join();
twoobj.join();
以上是关于C++ thread 实现参考的主要内容,如果未能解决你的问题,请参考以下文章