如何声明异步函数
How do I declare an async function?
我是线程和异步函数的新手,我正在尝试使用异步函数从以下函数返回信息:
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
所以我想我最初的问题是你如何声明异步函数?
我也有几个关于异步函数如何工作的问题。如果你在一个循环中声明许多异步函数,就像我上面所做的那样,这些函数会同时运行吗?还是在循环过程中一次运行一个?
如果它们一次运行一个,那么在不同数量的线程中同时运行此函数的更好方法是什么?
-
请发布完整的消息错误。您发布的错误不会对错误提供任何提示。
-
请发布可编译和完全可重现的MCVE。
-
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;
相关文章:
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- 如何在 std::future 的向量中调用异步函数
- 如何保持异步函数中使用成员的shared_ptr对象的活动状态?
- 如何声明异步函数
- C++中的异步函数调用
- 异步函数产生不一致的结果
- Windows中的C++异步函数
- Qt 中的异步函数调用
- 如何避免在调用异步函数进行 lambda 回调时出现额外的副本
- 如何创建异步函数
- 异步函数出错
- 如何调用boost::asio异步函数
- 处理c++中的复合异步函数
- std::异步函数串行运行
- 自动删除发送给异步函数的容器/io_service
- 异步函数调用的参数生存期
- c++boost asio异步函数在dll中不起作用
- 无法理解异步函数的值,特别是来自库的值