修复这个 std::async 调用

Posted

技术标签:

【中文标题】修复这个 std::async 调用【英文标题】:Fix This std::async Call 【发布时间】:2017-05-23 00:51:15 【问题描述】:

std::async 有问题,我写的每一种方式都证明是非法的。有人有什么建议吗?

PS:这是一个异步 IP 范围扫描器。

bool PortCheck(std::string ip, int port)




std::vector<std::pair<std::string, std::future<bool>>> JobPool;

std::future<bool > f = PortCheck(argStartAddress, argPort);


JobPool.push_back(std::make_pair(
    argStartAddress,
    f
));

【问题讨论】:

***.com/help/how-to-ask *** 有这些要求是有原因的。这里有很多与您的问题无关的代码;它使回答变得更加困难。请制作一个最小的、完整的和可验证的例子(你能重现问题的最小的东西)。 std::future&lt;bool&gt; f = std::async(std::launch::async, PortCheck, argStartAddress, argPort); 【参考方案1】:
std::future<bool> f = std::async(PortCheck, argStartAddress, argPort);

JobPool.push_back(std::make_pair(
    argStartAddress,
    std::move(f)  // note std::move
));

【讨论】:

不起作用,“std::future f = std::async(PortCheck, argStartAddress, argPort);”是非法的 imghost.io/images/2017/01/08/… 在你的真实代码中,PortCheck 是某个类的成员函数吗?我不禁注意到你忽略了这个重要的事实。因此,提供an MCVE 的重要性 那么,显示它所属的类,以及您希望调用PortCheck 的该类的实例。换句话说,准备一个 MCVE。

以上是关于修复这个 std::async 调用的主要内容,如果未能解决你的问题,请参考以下文章

std::async()

并非所有 std::packaged_task 在 std::async 调用中执行

主线程等待 std::async 完成[重复]

调用的目标发生了异常这个异常怎么处理

JavaRMI服务远程方法调用漏洞如何修复lin

我该如何修复这个 NaN