2012-02-26 48 views
6

オブジェクト内でスレッドを開始するにはどうすればよいですか?例えば、C++ boost :: thread、クラス内でスレッドを開始する方法

class ABC 
{ 
public: 
void Start(); 
double x; 
boost::thread m_thread; 
}; 

ABC abc; 
... do something here ... 
... how can I start the thread with Start() function?, ... 
... e.g., abc.m_thread = boost::thread(&abc.Start()); ... 

だから後、私は、のような

abc.thread.interrupt(); 
abc.thread.join(); 

おかげで何かを行うことができます。

答えて

6

使用boost.bind:

boost::thread(boost::bind(&ABC::Start, abc)); 

あなたは、おそらくポインタ(またはshared_ptrのを)欲しい:

boost::thread* m_thread; 
m_thread = new boost::thread(boost::bind(&ABC::Start, abc)); 
+0

ガイ、ありがとう、それはうまく動作します。 – 2607

15

あなたはどちらのバインド、またポインタを必要としています。

boost::thread m_thread; 
//... 
m_thread = boost::thread(&ABC::Start, abc); 
+0

+1:そうです。 bindを使用するのと同じ引数を持つコンストラクタがあります。私はより読みやすいと思うので、私はバインドを好む。スレッドを動かすためのサポートもありますが、ポインタが好きなのは、何が起こっているのかを知っているからです(コピーと移動の両方)。うまくいけばすべてが動くようになっています... –

+0

これは受け入れられる回答でしょう – user463035818

関連する問題