2013-05-16 2 views
9

boost::thread을 시작하려면 아주 간단한 예제를 작성했습니다. 작동하지 않습니다. 아무도 내 실수를 지적 할 수 있을까?boost :: thread - 간단한 예제가 작동하지 않습니다. (C++)

나는 아주 간단한 functor 유형의 클래스를 작성하여 작업을 수행했습니다. 이제

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

, 나는 두 가지 방법 중 하나로 합을 계산할 수 있습니다 : 두 배의 std::vector의 합을 계산하고, 나에게 나중에 결과를 얻을 수있는 방법을 제공하기로했다. 예를 들어 메인 스레드 내에서 수행하면

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

을하기 때문에 사용해야합니다.

관련 문제