boost :: thread – 简单的例子不起作用(C)

前端之家收集整理的这篇文章主要介绍了boost :: thread – 简单的例子不起作用(C)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要开始使用boost :: thread,我已经写了一个非常简单的例子 – 它不起作用.有人会指出我的错误吗?

我写了一个非常简单的函子类类来做这个工作.它应该计算一个std ::向量的双打的总和,并给我一个方法来得到结果:

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

那么它不行.

对不起,如果这是明显的,但我被困了.任何线索?

解决方法

你应该使用
boost::thread thread(boost::ref(S),boost::cref(numbers));

因为默认情况下线程会复制这些参数

猜你在找的C&C++相关文章