在 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 参数。

编辑

正如其他人所说,您不需要使用 bindboost::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 中将参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何在firebase函数中将参数传递给cors

可以在Python中将参数传递给函数对象吗?

在Python中将多个参数传递给pool.map()函数[重复]

如何在 Javascript .filter() 方法中将额外参数传递给回调函数?