boost :: thread – 简单的例子不起作用(C)
发布时间:2020-12-16 03:00:43 所属栏目:百科 来源:网络整理
导读:要开始使用boost :: thread,我已经写了一个非常简单的例子 – 它不起作用.有人会指出我的错误吗? 我写了一个非常简单的函子类类来做这个工作.它应该计算一个std ::向量的双打的总和,并给我一个方法来得到结果: class SumWorker{private: double _sum;publi
|
要开始使用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)); 因为默认情况下线程会复制这些参数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
