2013-05-16 28 views
9

要開始使用boost::thread,我寫了一個非常簡單的例子 - 這不起作用。有誰能指出我的錯誤嗎?boost :: thread - 簡單的例子不起作用(C++)

我寫了一個非常簡單的函子類類來完成這項工作。它應該計算雙打的std::vector的總和,並給我一個方法後得到的結果:

class SumWorker 
{ 
private: 
    double _sum; 
public: 

    SumWorker() : _sum(-1.0) {} 

    void operator() (std::vector<double> const & arr) 
    { 
     _sum = 0.0; 
     for(std::vector<double>::const_iterator i = arr.begin(); 
      i != arr.end(); 
      i++) 
     { 
      _sum += (*i); 
     } 
    } 

    double const value() const 
    { 
     return _sum; 
    } 
}; 

現在,我可以計算兩種方式之一的總和。如果我在主線程內做,就像

SumWorker S; 
S(numbers);    // "numbers" is an std::vector<double> 
double sum = S.value(); // "sum" now contains the sum 

然後一切正常。然而,如果我試圖在一個單獨的線程(這是整個點)做到這一點,

SumWorker S; 
boost::thread thread(S, numbers); // Should be equivalent to "S(numbers);" 
thread.join();     // Wait for thread to finish 
double sum = S.value();   // "sum" now contains -1.0 

...然後它不起作用。

對不起,如果這是顯而易見的,但我很難過。任何線索?

回答

13

你應該把默認的線程會將這些參數使用

boost::thread thread(boost::ref(S), boost::cref(numbers)); 

至今。