1

我想创建一组都有未来的线程(这就是我使用 packaged_tasks 的原因),所以我可以使用它们返回的值。但是,以下代码在编译期间返回错误:

boost::thread_group group;


for(int i=0; i<4; i++){
    boost::packaged_task<int> task(std::bind(&matchThis,someStr, anotherStr));
    boost::unique_future<int> fi=task.get_future();

    //add task to task-group
    group.create_thread(boost::move(task));
    group.join_all();
}

这是错误:

c:\boost\boost\thread\detail\thread_group.hpp:42: 错误: "boost::packaged_task::packaged_task": 无法访问在 boost::packaged_task-class 中声明的私有成员。与 [R=int] ...

当我创建这样的线程时,这段代码运行良好:

boost::thread thread(boost::move(task));

那么使用 thread_groups 有什么问题呢?

4

1 回答 1

1

我假设您没有使用 C++11(因为我认为如果您使用它会起作用。)

boost::thread已“启用移动”,因此它可以接受由 . 返回的模拟右值引用boost::moveboost::thread_group没有以相同的方式“启用移动”,因此参数 tocreate_thread必须是可复制的,而 apackaged_task是不可复制的。

我建议检查 Boost Trac 错误数据库,如果还没有添加请求create_thread以支持移动的右值。

于 2012-06-06T16:07:53.067 回答