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