2013-05-16 26 views
9

boost::thread ile çalışmaya başlamak için çok basit bir örnek yazdım. Kimse benim hatama işaret edebilir mi?boost :: thread - Basit örnek çalışmıyor (C++)

İşi yapmak için çok basit bir functor türü sınıf yazdım. Şimdi

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

, iki yoldan birini kullanarak toplamını hesaplayabiliriz: çiftlerde bir std::vector toplamını hesaplamak ve bana daha sonra sonuç almak için bir yol vermek gerekiyordu. Ana iş parçacığı içinde,

ile yaptığımda her şey çalışır. Ben ayrı bir iş parçacığı (bütün mesele olduğu) içinde

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 

bunu denerseniz Ancak ... o zaman çalışmaz.

Eğer bu açıksa üzgünüm, ama çok şaşırdım. Herhangi bir ipucu?

cevap

13

Varsayılan iplik kopya bu argümanlar tarafından

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

beri kullanmalıdır.