C++ 从Boost线程返回Double

C++ 从Boost线程返回Double,c++,multithreading,boost,C++,Multithreading,Boost,嗨,我有一个推进线程,它应该返回一个双线程。函数如下所示: 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->

嗨,我有一个推进线程,它应该返回一个双线程。函数如下所示:

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

感谢您的帮助。

tmp
在线程连接后未获得预期值,因为创建boost::thread对象会将所有参数复制到线程存储()

您必须用
boost::ref
封装
tmp
,这具有提供“可复制的可构造引用”的效果(如果术语不充分,很抱歉,但这就是想法)


关于

的更多信息需要注意的是,参数是复制的。请看文档中的。我已经批准了您的待定编辑,因此我无法对该问题进行自己的编辑。你能再一次修改这个问题,以便标签是Boost和C++吗?现在的标签毫无意义。谢谢,这是我第一次发布
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
double tmp = -42.0;
boost::thread up(&analyser::findup,*this, startwl,max, boost::ref(tmp));