如何声明异步函数

How do I declare an async function?

本文关键字:异步 函数 声明 何声明      更新时间:2023-10-16

我是线程和异步函数的新手,我正在尝试使用异步函数从以下函数返回信息:

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

所以我想我最初的问题是你如何声明异步函数?

我也有几个关于异步函数如何工作的问题。如果你在一个循环中声明许多异步函数,就像我上面所做的那样,这些函数会同时运行吗?还是在循环过程中一次运行一个?

如果它们一次运行一个,那么在不同数量的线程中同时运行此函数的更好方法是什么?

  1. 请发布完整的消息错误。您发布的错误不会对错误提供任何提示。

  2. 请发布可编译和完全可重现的MCVE。

  3. gcc 的编译错误非常明显:

<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;