gpt4 book ai didi

c++ - 无法使用 packaged_task 在 thread_group 中创建线程

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:29 25 4
gpt4 key购买 nike

我想创建一组线程,它们都有 future (这就是我使用 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: ERROR: "boost::packaged_task::packaged_task": No access to private member which was declared in the boost::packaged_task-class . with [ R=int] ...

当我创建这样一个线程时,这段代码工作得很好:

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

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

最佳答案

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

boost::thread 已“启用移动”,因此它可以接受 boost::move 返回的模拟右值引用。 boost::thread_group 还没有以同样的方式“启用移动”,因此 create_thread 的参数必须是可复制的,并且 packaged_task不可复制。

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

关于c++ - 无法使用 packaged_task 在 thread_group 中创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com