Я создаю приложение на основе примера на веб-сайте Boost.Вот соответствующие определения, которые нужно знать:
typedef boost::shared_ptr< connection > connection_ptr;
std::set< connection_ptr> connections_;
std::vector< boost::shared_ptr< boost::thread> > threads;
, где connection - это класс.
В одном из файлов, connection_manager.cpp , они работают следующим образомthis:
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(new boost::thread(
boost::bind(&connection::start, c)));
// push the newely created thread into the vector
threads.push_back(thread);
// save the connection in our set
connections_.insert(c);
}
Моя проблема и, следовательно, этот вопрос, это когда я хочу только один из этих объектов connection_.В приведенной ранее ссылке они действуют следующим образом:
void connection_manager::stop(connection_ptr c)
{
connections_.erase(c);
c->stop();
// find the connection in among the threads and join that thread
}
Но, как показывает приведенный выше комментарий, как мне найти c среди всех потоков и остановить только этот поток.Я хочу вызвать функцию join () для этого потока.
Обновление:
Я думаю, что это действительно то, что я действительно хочу иметь!Поэтому я объявляю свою переменную как
std::map < connection_ptr, boost::shared_ptr < boost::thread > > threads;
Но тогда, как мне создать новый протектор, так же, как и раньше?Как:
boost::shared_ptr < boost::thread > thread(new boost::thread(
boost::bind(&connection::start, c)));
Но каков тогда следующий шаг?Извините за смущение ...: -)