簡體   English   中英

從Boost線程返回Double

[英]Return Double from Boost thread

嗨,我有一個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;
}

無論如何,我已經嘗試過並用Google搜索了幾乎所有內容,但是我無法獲取它來返回值。

現在的輸出看起來像這樣。

before join -42
in thread 843.487
after join -42

謝謝你的幫助。

線程加入后, tmp無法獲得預期值,因為創建boost :: thread對象會將所有參數復制到線程存儲中( 請參閱文檔 )。

您必須使用boost::ref封裝tmp ,其作用是提供“可復制構造的引用”(很抱歉,如果術語不夠充分,但這就是這個主意)

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

有關線程管理文檔的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM