如何在C ++中处理异步任务结果分支

时间:2014-01-07 00:34:03

标签: c++ c++11 promise future

我正在为游戏引擎开发人工智能系统。单元可以具有由当前单元的AI状态设置的活动任务。例如,UnitA可以获得攻击UnitB的任务。 AI状态同时必须等待任务完成(这可能需要几秒钟,同时游戏循环必须继续)。

任务完成后,状态必须对任务结果作出反应。例如,如果UnitB被成功杀死,状态将继续它的默认任务(Guard / Stand / Wander,具体取决于单位)。如果任务因为UnitA太受伤而无法继续攻击而被中断,那么AI状态必须切换到"逃离"。

我应该采取哪种方法来最有效,尽可能地做到这一点?目前,我只使用简单的std::unique_ptr实现任务,其中调用Update函数。我还有一个Move任务,它将单元中的任务设置为nullptr,一旦完成但没有通知其他任何内容。

我正在使用std::futurestd::promise方向看,但不知道是否有更好的方法可以做到这一点。有很多有AI的活动单位,所以我不能产生一个线程来处理AI状态并等待std::future给出一个结果,因为这将产生至少在一个体面的游戏中同时有超过100个线程。

我在解决方案中寻找的最重要的事情是AI将采取的分支决策路径的可读性。我可以创建一个消息队列,并使用一个大开关从那里读取结果,但是不能清楚地显示按什么顺序发生的事情。

0 个答案:

没有答案