从Boost线程返回Double

Ben*_*tzi 5 c++ multithreading boost

嗨,我有一个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->data[i].db >= (max-30)) {
        myret = this->data[i+1].lambda;
        std::cout <<"in thread " << myret << std::endl;
        return;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此函数由另一个函数调用:

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;
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我已经尝试过谷歌几乎任何东西,但我不能让它返回一个值.

输出现在看起来像这样.

before join -42
in thread 843.487
after join -42
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Cha*_*esB 6

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

你必须封装tmpboost::ref,其中有提供"拷贝构造参考"的影响(如果该术语是不够的遗憾,但是这是想法)

double tmp = -42.0;
boost::thread up(&analyser::findup,*this, startwl,max, boost::ref(tmp));
Run Code Online (Sandbox Code Playgroud)

有关线程管理文档的更多信息