我是线程和异步函数的新手,我正在尝试使用异步函数从以下函数返回信息:
std::vector<std::vector<int> > calculatingSlices(SquareMatrix A, std::vector<std::vector<int> > slices)
我正在使用以下代码进行此操作:
std::vector<std::vector<int>> slices;
std::vector<std:future<std::vector<int>>> results;
for(int i = 0; i < numOfThreads; i++){
results.push_back(std::async(std::launch::async, calculatingSlices, A, slices))
}
虽然我收到此错误:
error: attempt to use a deleted function
所以我想我的第一个问题是如何声明一个异步函数?
我还有一些关于异步功能如何工作的问题。 如果您在循环中声明了许多异步函数(如我在上文中所做的那样),这些函数是否会同时运行?还是在循环中每次运行一次?
如果它们一次运行一个,那么在不同数量的线程中同时运行此功能的更好方法是什么?
答案 0 :(得分:1)
<source>:14:87: error: no matching function for call to 'std::vector<std::future<std::vector<int> >
>::push_back(std::future<std::vector<std::vector<int> > >)'
results.push_back(std::async(std::launch::async, calculatingSlices, A, slices))
由于calculatingSlices
的返回值为vector<vector>
,因此您想存储vector<future<vector<vector>>>
而不是vector<future<vector>>>
。该函数返回2d向量,而不是1d。
所以改变:
std::vector<std:future<std::vector<int>>> results;
进入
std::vector<std::future<std::vector<std::vector<int>>>> results;