使用多线程进行寻路

时间:2017-03-20 01:38:07

标签: c++ multithreading future a-star

我在direct3D中使用自己的引擎编写自己的游戏。我对多线程几乎一无所知。问题是我的敌人使用A-star跟随玩家,表现非常好。即便如此,我还想进一步提高性能。这就是我想使用多线程的原因。我的目标是在游戏不断更新时在不同的线程中处理寻路。好吧,考虑到OrderPath是一个std :: future类型变量,这就是代码:

void EnemyWaveManager::DoPath()
{
    for (auto& enemie : Enemy::Enemies)
    {
        enemie->FindComponentByType<EnemyAI>()->ComputePath();
    }
}
void EnemyWaveManager::Update()
{
    if (ThreadIsReady(OrderPath))
    {
        OrderPath = std::async(std::launch::async, &EnemyWaveManager::DoPath, this);
    }
}

这是我的ThreadIsReady实现:

template<typename T> inline
bool ThreadIsReady(std::future<T> const& f)
{
    return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready;
}

好的,所以敌人在前3秒内正确计算出路径然后停止工作。线程永远不会完成,所以它不会命令更多的寻路。此外,有时我会在pathfinding函数中遇到访问冲突错误,这很奇怪,因为它只使用局部变量。

0 个答案:

没有答案