一、成员函数作为线程入口
#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;
}