Как передать аргумент для 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
Спасибо.
Ответы
Ответ 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 );