2

这是我第一次使用 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'

这是处理线程创建的代码片段

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
    }
}
4

2 回答 2

4

成员函数采用类型 (cv 限定) 的隐式第一个参数T*,其中T是具有成员函数的类。您需要传递一个指向Conversion实例的指针,例如,

Conversion c;
firstThread = boost::thread(&Conversion::conversion, &c, firstPart);
于 2013-04-18T15:59:04.197 回答
0

使用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

于 2013-04-18T15:54:41.267 回答