ブースト Web サイトの例に基づいてアプリケーションを構築しています。これらは、知っておくべき関連する定義です。
typedef boost::shared_ptr< 接続 > connection_ptr; std::set< connection_ptr> connections_; std::vector< boost::shared_ptr< boost::thread> > スレッド。
connection はクラスです。
ファイルの 1 つであるconnection_manager.cppでは、次のようにしています。
void connection_manager::start(connection_ptr c) { connections_.insert(c); c->start(); }
ここで、プログラム構造のために、すべての新しい接続を別のスレッドで開始したいと考えています。したがって、次のように上記を変更しました。
void connection_manager::start(connection_ptr c) { boost::shared_ptr<boost::thread>thread(新しいboost::thread( boost::bind(&connection::start, c))); // 新しく作成されたスレッドをベクターにプッシュします スレッド.push_back(スレッド); // 接続をセットに保存します connections_.insert(c); }
私の問題、つまりこの質問は、これらの connection_ オブジェクトを 1 つだけにしたい場合です。以前に提供されたリンクでは、彼らは次のようにしています:
void connection_manager::stop(connection_ptr c) { connections_.erase(c); c->stop(); // スレッド間の接続を見つけて、そのスレッドに参加します }
しかし、上記のコメントが示唆するように、すべてのスレッドの中から c を見つけて、そのスレッドだけを停止するにはどうすればよいでしょうか。そのスレッドの join() 関数を呼び出したい。
アップデート:
これこそが、私が本当に手に入れたいものだと思います!だから私は自分の変数を次のように宣言します
std::map < connection_ptr, boost::shared_ptr < boost::thread > > スレッド;
では、以前と同じ方法で新しいトレッドを作成するにはどうすればよいでしょうか。お気に入り:
boost::shared_ptr < boost::thread > thread(new boost::thread( boost::bind(&connection::start, c)));
しかし、次のステップは何ですか?混乱させてすみません... :-)