Как передать аргумент в boost :: thread? - PullRequest
19 голосов
/ 20 апреля 2011
thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );  

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

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

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

Спасибо.

Ответы [ 3 ]

31 голосов
/ 20 апреля 2011

Следующий код 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

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

void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);

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

8 голосов
/ 07 декабря 2012

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

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

6 голосов
/ 12 апреля 2015
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 );  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...