std :: async仅同步工作

时间:2018-11-07 07:52:05

标签: c++ asynchronous lambda future

im正在尝试向我的A Star类添加异步方法。我希望能够异步计算路径,以便每个代理都能够独立于其他代理找到其路径。

问题是,目前看来,程序正在等待线程完成。 如何异步执行每个调用?

功能

bool simplePath::navAgent::findPathAsync(int _startX, int _startY, int _endX, int _endY){
    auto t1 = std::async([&]{return this->findPath(_startX,_startY,_endX,_endY);});
    t1.get();
    return true;
}

致电

navComponent->findPathAsync(0,2,30,45);
    navComponent->findPathAsync(0,2,123,100);
    navComponent->findPathAsync(0,2,8,7);
    navComponent->findPathAsync(0,2,8,7);
    navComponent->findPathAsync(0,2,8,7);
    navComponent->findPathAsync(0,2,8,7);
    navComponent->findPathAsync(0,2,8,7);

这是我的错?

1 个答案:

答案 0 :(得分:2)

调用t1.get()时,代码正在等待计算结果。

启动任务时,您没有指定启动策略,因此使用的是默认策略std::launch::async | std::launch::deferred,它可能根本不会启动单独的线程,并且在您调用{{1 }}。

您需要将lambda更改为通过值而不是通过引用捕获,因为执行lambda时所引用的整数参数可能不再存在。

一个完整的示例是:

t1.get()