Подтвердить что ты не робот

Как передать аргумент для boost:: thread?

thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );  

Возможно ли, что run имеет такой аргумент:

void clientTCP::run(boost:function<void(std::string)> func);

и если да, то как должен быть записан мой boost:: thread call

Спасибо.

4b9b3361

Ответ 1

Следующий код boost::bind( &clientTCP::run , this ) определяет обратный вызов функции. Он вызывает функцию run в текущем экземпляре (this). С boost:: bind вы можете сделать следующее:

// Pass pMyParameter through to the run() function
boost::bind(&clientTCP::run, this, pMyParameter)

См. документацию и пример здесь:
http://www.boost.org/doc/libs/1_46_1/doc/html/thread/thread_management.html

Если вы хотите построить экземпляр of boost:: thread с функцией или вызываемый объект, который требует аргументы, которые должны быть предоставлены, это может быть сделанные путем передачи дополнительных аргументов к конструктору boost:: thread:

void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);

Надеюсь, что это поможет.

Ответ 2

Я просто хотел отметить, что для будущей работы Boost по умолчанию передает аргументы по значению. Поэтому, если вы хотите передать ссылку, у вас есть методы boost::ref() и boost::cref(), последний для постоянных ссылок.

Я думаю, вы все еще можете использовать оператор & для ссылки, но я не уверен, я всегда использовал boost::ref.

Ответ 3

thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );  

bind и function не нужны и делают код медленнее и используют больше памяти. Просто выполните:

thread_ = boost::thread( &clientTCP::run , this );  

Чтобы добавить аргумент, просто добавьте аргумент:

thread_ = boost::thread( &clientTCP::run , this, f );