08/07/09 20:28:14
boost::threadを使っていて質問があります。
スレッドオブジェクトをスレッド処理完了後に自動消去したいのですが、
以下のやり方だとまずい気がします。定石みたいなものはないでしょうか?
struct ThreadManager {
boost::shared_ptr<Thread> th_; // 管理するスレッド
bool thread_is_running(void) const { return th_!=0; }
void start_thread(void) { if (thread_is_running()) return; th_.reset(new Thread(this)); boost::thread(boost::ref(*th_.get())); }
// ※スレッド処理が終わったらth_を空にしたい
void delete_thread(void) { thread.reset(); }
};
struct Thread {
ThreadManager* p_;
Thread(ThreadManager* p) : p_(p) {}
void operator()(void) { /* ... スレッド処理 ... */ p_->delete_thread(); }
// スレッド処理終了後、ThreadManagerを通じて自分を消去
};