Вернуть Double из Boost thread - PullRequest
5 голосов
/ 01 марта 2011

Привет, у меня есть 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

Спасибо за любую помощь.

1 Ответ

6 голосов
/ 01 марта 2011

tmp не получает ожидаемого значения после объединения потоков, поскольку при создании объекта boost :: thread копируются все аргументы в хранилище потоков ( см. Документацию ).

Вы должны инкапсулировать tmp с boost::ref, что дает эффект "копируемой ссылки" (извините, если терминология неадекватна, но это идея)

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

Подробнее о Управление потокамидокументация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...