嗨我有一个Boost线程应该返回一个double。该函数如下所示:
void analyser::findup(const double startwl, const double max, double &myret){
this->data.begin();
for(int i = (int)data.size() ; i >= 0;i--){
if(this->data[i].lambda > startwl){
if(this->data[i].db >= (max-30)) {
myret = this->data[i+1].lambda;
std::cout <<"in thread " << myret << std::endl;
return;
}
}
}
}
此函数由另一个函数调用:
void analyser::start_find_up(const double startwl, const double max){
double tmp = -42.0;
boost::thread up(&analyser::findup,*this, startwl,max,tmp);
std::cout << "before join " << tmp << std::endl;
up.join();
std::cout << "after join " << tmp << std::endl;
}
无论如何,我已经尝试过谷歌几乎任何东西,但我不能让它返回一个值。
输出现在看起来像这样。
before join -42
in thread 843.487
after join -42
感谢您的帮助。
答案 0 :(得分:6)
tmp
在线程连接后没有得到预期的值,因为创建boost :: thread对象会将所有参数复制到线程存储(see documentation)。
您必须使用tmp
封装boost::ref
,这样可以提供“可复制构造的参考”(如果术语不合适,那就很抱歉,但这就是想法)
double tmp = -42.0;
boost::thread up(&analyser::findup,*this, startwl,max, boost::ref(tmp));
的更多信息