@pixik

Как сделать в boost выполнение потока по требованию, а не автоматически?

Доброго времени!
Пишу простенький сервер на boost.
В конструкторе listener`a создаю объект boost::thread, связываю его с моей функцией обработчиком.

Почему новый поток начинает своё выполнение сразу же, как только создался объект boost::thread? Можно ли сделать так, чтобы поток начинал своё выполнение по требованию, а не так сразу?

thrd_sp = boost::shared_ptr<boost::thread>(
      new boost::thread( boost::bind( &listener::dispatch, this )));
  • Вопрос задан
  • 379 просмотров
Решения вопроса 2
Olej
@Olej
инженер, программист, преподаватель
Вообще то, то что вы делаете - это то, что называется активный объект (например в языке Oberon это обычное дело).
У вас неверная архитектура: если вы хотите такого поведения (как пишете), то:
- создавать поток вы должны не в конструкторе и не наследованием...
- а полем-указателем на поток, который будете активировать отдельным методом run(), где и будет, собственно, создаваться и запускаться поток.
Ответ написан
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Нет, вроде бы он так не умеет. Создавайте его не заранее а в тот момент, когда вам нужно. Если вы хотите заранее запомнить функцию и аргументы, с которыми надо запустить тред, можно использовать boost::bind и boost::function.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы