2010-12-29 21 views
5

誰かがboost :: thread変数を宣言することができますか? boost :: thread t(スレッド);スレッドを開始しますが、どこかに宣言して別の場所で起動したいと思います。 Thanxは事前にboost :: thread変数の前方宣言

私は私の知る限りでは

boost::thread t; 
t=boost::thread (thread); 

/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::thread::thread(const boost::thread&)’: 
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private 
/usr/include/boost/thread/thread.hpp:35: error: within this context 
thr.cpp: In function ‘int main()’: 
thr.cpp:20: note: synthesized method ‘boost::thread::thread(const boost::thread&)’ first required here 
/usr/include/boost/noncopyable.hpp: In member function ‘boost::thread& boost::thread::operator=(const boost::thread&)’: 
/usr/include/boost/noncopyable.hpp:28: error: ‘const boost::noncopyable_::noncopyable& boost::noncopyable_::noncopyable::operator=(const boost::noncopyable_::noncopyable&)’ is private 
/usr/include/boost/thread/thread.hpp:35: error: within this context 
thr.cpp: In function ‘int main()’: 
thr.cpp:20: note: synthesized method ‘boost::thread& boost::thread::operator=(const boost::thread&)’ first required here 

答えて

4

を使用する場合は、それを行うための唯一の方法は、threadmove semantics使用することです:あなたが投稿エラーメッセージから:

boost::thread t; // Will be initialized to `Not-a-Thread`. 

// Later... 
t = boost::thread(your_callable); 
// Now `your_callable()` runs inside a new thread that has been moved to `t`. 

EDITをあなたのバージョンのboostでmoveセマンティクスを使うことはできないようです。その場合、threadインスタンスを初期化して後で開始することができなくなる恐れがあります。

+0

あなたの呼び出し可能コードはどういう意味ですか? (あなたが編集する前に書いたように) – Shweta

+0

@Shweta、callableは 'operator()'が多重定義されているクラスのインスタンスになることができます(http:// en .wikipedia.org/wiki/Function_object#In_C_and_C.2B.2B))。私は完全性のためにその変更を行った:) –

+0

申し訳ありません。 – Shweta