一、成员函数作为线程入口
# 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 ( 1 s) ;
cout << "." << flush;
}
}
} ;
int main ( )
{
M_thread th;
th. Start ( ) ;
this_thread:: sleep_for ( 10 s) ;
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 ;
}