自学内容网 自学内容网

C++多线程学习[三]:成员函数作为线程入口

一、成员函数作为线程入口

#include<iostream>
#include<thread>
#include<string>

using namespace std;

class Mythread
{
public:
string str;
void Test()
{
cout << str << endl;
}
};
int main()
{
Mythread test;
test.str = "Test";
thread t = thread(&Mythread::Test, &test);
t.join();
return 0;
}

二、简单的线程封装

#include<iostream>
#include<thread>
#include<string>

using namespace std;

class Mythread
{
public:
void Start()
{
is_exit_ = false;
th_ = thread(&Mythread::Main,this);
}
void Wait()
{
if (th_.joinable())//检测线程是否已经结束
th_.join();
}
void Stop()
{
is_exit_ = true;
Wait(); 
}
bool is_exit() { return is_exit_; }
private:
virtual void Main() = 0;
thread th_;
bool is_exit_ = false;
};

class M_thread : public Mythread
{
public:
void Main() override
{
cout << "Thread is begin" << endl;
while (!is_exit())
{
this_thread::sleep_for(1s);
cout << "." << flush;
}
}
};
int main()
{
M_thread th;
th.Start();
this_thread::sleep_for(10s);
th.Stop();
th.Wait();
return 0;
}

三、lambda临时函数作为线程入口

#include<iostream>
#include<thread>
#include<string>
using namespace std;
class Test
{
public:
void Start()
{
thread th = thread([this]() {
cout <<s << endl;
});
th.join();
}
private:
string s = "Test class`s lambda";
};

int main()
{
thread th([]() {cout << "Test lambda" << endl; });
th.join();
Test t;
t.Start();
return 0;
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f095c576c9a243a3a3c7639cc6fd6f92.png


原文地址:https://blog.csdn.net/Rain_ZZX/article/details/135568561

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!