如何将参数传递给 boost::thread?

Posted

技术标签:

【中文标题】如何将参数传递给 boost::thread?【英文标题】:How to pass an argument to boost::thread? 【发布时间】:2011-08-09 12:00:18 【问题描述】:
thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );  

是否可能 run 有这样的参数:

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

如果是的话应该如何编写我的 boost::thread 调用

谢谢。

【问题讨论】:

【参考方案1】:

以下代码boost::bind( &amp;clientTCP::run , this ) 定义了一个函数回调。它在当前实例 (this) 上调用函数 run。使用 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);

希望对您有所帮助。

【讨论】:

【参考方案2】:

我只是想指出,对于未来的工作,Boost 默认按值传递参数。所以如果你想传递一个引用,你有 boost::ref()boost::cref() 方法,后者用于常量引用。

我认为您仍然可以使用&amp; 运算符进行引用,但我不确定,我一直使用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 );  

【讨论】:

以上是关于如何将参数传递给 boost::thread?的主要内容,如果未能解决你的问题,请参考以下文章

无法将参数传递给 boost::thread 构造函数

在 boost::thread 中将参数传递给函数

如何将 POST 参数传递给 Durable Function,然后将此参数传递给 Timer Triggered 函数

如何将参数传递给 Java 线程?

如何将参数传递给进程

如何将参数传递给 erlang os:cmd()?