使用hpx::when_any函数的正确方法是什么?



我刚刚开始学习c++并行编程,想使用HPX。我需要以N为组完成几个任务,我想编写代码,将所有线程放入一个向量中,当至少一个线程完成时,将其替换为下一个线程。

#include <iostream>
#include <vector>
#include "hpx/hpx_main.hpp"
#include "hpx/future.hpp"
using namespace std;

int dummy(int a){
return a;
}

int main(){
vector<hpx::future<int>>futures;
futures.reserve(3);

for(int step = 0; step < 3; step++){
futures.push_back(hpx::async(dummy, step));
}

int index;
auto f2 = hpx::when_any(futures).then([&](auto f){
return f;
});


auto res = f2.get();
vector<hpx::future<int>> fut3 = res.futures;
for(int i = 0; i < fut3.size(); i++){
cout << fut3[i].get() << endl;
}
}

此代码导致以下错误:

错误:静态断言失败:结果类型必须由输入类型

构造我试着在网上找到解决方案,但是几乎没有任何带有hpx的代码示例。

尝试在复制结果期货时添加std::move:

std::vector<hpx::future<int>> fut3 = std::move(res.futures);

问题是拷贝完成后res.futures失效。

相关内容

  • 没有找到相关文章

最新更新