我在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函数中遇到访问冲突错误,这很奇怪,因为它只使用局部变量。