在 boost::thread 中将参数传递给函数
Posted
技术标签:
【中文标题】在 boost::thread 中将参数传递给函数【英文标题】:pass arguments to function in a boost::thread 【发布时间】:2013-04-18 15:45:30 【问题描述】:这是我第一次使用 boost 线程功能,在此之前我对使用多个线程知之甚少。我试图在初始调用的同时运行一个函数的第二个实例,这样我就可以将两个不同的变量传递给同一个函数,我希望这可以加快我的程序。使用我知道的代码,我不断收到 C2784 错误,上面写着
'T *boost::get_pointer(const boost::scoped_ptr<T> &)' : could not deduce template argument for 'const boost::scoped_ptr<T> &' from 'const std::string'
这是处理线程创建的代码的 sn-p
string firstPart = recText.substr(1,(subPart1-1));
string secondPart = recText.substr(subPart1,subPart1);
boost::thread firstThread;
boost::thread secondThread;
firstThread = boost::thread(&Conversion::conversion,firstPart);
secondThread = boost::thread(&Conversion::conversion,secondPart);
firstThread.join();
secondThread.join();
编辑
void Conversion::conversion(string _Part)
int value_Part = 1;
int valueShort = 0;
int value = checkValue;
if(value == value_Part)
// do stuff
【问题讨论】:
Conversion::conversion
长什么样子?
@juanchopanza 整个函数相当冗长,但如果你想要更多我可以添加它,这就是它的定义/开始方式
Conversion::conversion
是成员函数吗?
是的,如果您想知道的话,它不是构造函数。它是类转换的成员。我希望这就是你的问题我不太确定的意思
好的,这是个问题。我添加了一个答案。
【参考方案1】:
成员函数采用类型(cv 限定)T*
的隐式第一个参数,其中T
是具有成员函数的类。例如,您需要传递一个指向Conversion
实例的指针,
Conversion c;
firstThread = boost::thread(&Conversion::conversion, &c, firstPart);
【讨论】:
【参考方案2】:使用boost::bind
。
Conversion *conversion_obj_ptr = ...
boost::thread firstThread;
firstThread = boost::thread(boost::bind(&Conversion::conversion, conversion_obj_ptr, firstPart);
这是假设 Conversion::conversion 是一个成员函数。如果 Conversion::conversion 不是成员函数,则省略 conversion_obj_ptr 参数。
编辑
正如其他人所说,您不需要使用 bind
,boost::thread
构造函数将为您完成。
http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html#thread.thread_management.thread.multiple_argument_constructor
【讨论】:
好的,只是不确定 *conversion_obj_ptr = 之后会发生什么 这里实际上不需要使用bind
。
@PeterR - 构造函数将参数绑定在一起。以上是关于在 boost::thread 中将参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章