std::thread::joinが返らない
シングルトンオブジェクト.
裏で回したスレッドに色々やらせて,プログラム終了時に止めて残った処理をさせたいんですが
"end loop"の表示が出てthread_loop()は終了してる様子なのにjoinが返ってきません.
何か勘違いでしょうか.詰まったのでとりあえずメモ.
2012/8/23 追記
解決しました.
VS2012RC
#include <iostream> #include <memory> #include <thread> #include <chrono> class Foo { public: /** 初期化 */ static void initialize(){ std::cout << "init" << std::endl; inst_.reset(new Foo()); inst_->thread_ = std::thread(thread_loop); } ~Foo() { std::cout << "dtor" << std::endl; end_flag_ = false; thread_.join(); //ここで停止 //後処理 std::cout << "dtor end" << std::endl; } private: Foo(): interval_(100), end_flag_(true){} Foo(const Foo&); Foo(Foo&&); Foo& operator=(const Foo&); Foo& operator=(Foo&&); static void thread_loop(); static std::unique_ptr<Foo> inst_; std::thread thread_; std::chrono::milliseconds interval_; bool end_flag_; }; std::unique_ptr<Foo> Foo::inst_; void Foo::thread_loop() { while(inst_->end_flag_) { std::cout << "loop..." << std::endl; //メイン処理 std::this_thread::sleep_for(inst_->interval_); } std::cout << "end loop" << std::endl; } int main(int argc, char* argv[]) { Foo::initialize(); std::cout << "wait.." << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Exit" << std::endl; }
出力
init loop... wait.. loop... loop... loop... loop... loop... loop... loop... loop... loop... Exit dtor end loop