gpt4 book ai didi

algorithm - 如何创建可以处理同时发生的事件的有限状态机

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:43 24 4
gpt4 key购买 nike

假设您有一个对象“A”,它可能从外部对象接收以下事件:

事件 1

事件 2

...

事件n

现在假设承载“A”的框架将所有相关事件传递给“A”(一次一个),然后调用 A::doEval()。

重要的是要注意“A”可以按任何顺序接收任何事件组合。 “A”可能在调用 doEval() 之前只获得一个事件,或者它可能在调用 doEval() 之前获得 5 个事件。没有办法提前知道。

同样重要的是要注意这些事件,因为它们都在调用 A::doEval() 之前传递给“A”,因此应被视为同时发生的事件。常规状态机会在每个事件传递给“A”时对其使用react。这在我的用例中是不正确的...我需要“A”坐下来收集所有事件,并且只有在 doEval() 中“A”才能执行任何操作。

现在这里是小窍门:doEval() 逻辑需要意识到只发生了事件的一个子集,但它可能需要将它们全部考虑在内。例如,代码(这很丑陋,我正在尝试避免)可能看起来像这样:

doEval()
if(Event 1 occurred && Event 2 occurred) then <do something>

就是那个“if”语句...我只想在两个事件都发生时执行操作,但我不想有那个“if”语句。这就是 FSM 应该摆脱的吧?我需要有一个层次结构的状态机吗?

关于解决此问题的“正确”方法有什么想法吗?任何可供阅读的链接或论文都很棒,代码甚至更好。

谢谢!

最佳答案

创建一个队列以收集指向“A”的所有事件并将它们从队列中弹出,然后处理事件。

关于algorithm - 如何创建可以处理同时发生的事件的有限状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com