题 如何将参数传递给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调用

谢谢。


18
2018-04-20 13:01


起源




答案:


以下代码 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构造函数:

void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);

希望有所帮助。


29
2018-04-20 13:14





我只想注意,对于未来的工作,默认情况下Boost按值传递参数。因此,如果你想传递一个参考,你就有了 boost::ref() 和 boost::cref() 方法,后者用于常量引用。

我想你仍然可以使用 & 运算符用于引用,但我不确定,我一直使用 boost::ref


8
2017-12-07 17:24



这点我。谢谢你。 - RandomInsano


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 );  

6
2018-04-12 14:40