# 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 ; 
} 
# 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 ; 
}