Để bắt đầu với boost::thread
, tôi đã viết một ví dụ rất đơn giản - không hoạt động. Ai có thể chỉ ra sai lầm của tôi?boost :: thread - Ví dụ đơn giản không hoạt động (C++)
Tôi đã viết một lớp functor rất đơn giản để thực hiện công việc. Đó là nghĩa vụ để tính tổng của một std::vector
của đôi, và đưa cho tôi một cách để có được kết quả sau:
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;
}
};
Bây giờ, tôi có thể tính toán số tiền theo một trong hai cách. Nếu tôi làm điều đó trong chủ đề chính, như,
SumWorker S;
S(numbers); // "numbers" is an std::vector<double>
double sum = S.value(); // "sum" now contains the sum
thì mọi thứ đều hoạt động. Tuy nhiên, nếu tôi cố gắng làm điều này trong một chủ đề riêng biệt (toàn bộ điểm),
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
... thì nó không hoạt động.
Xin lỗi nếu điều này là hiển nhiên, nhưng tôi bị bối rối. Bất kì manh mối nào?