如果没有事件发生,终止 gen_fsm

Posted

技术标签:

【中文标题】如果没有事件发生,终止 gen_fsm【英文标题】:Terminate gen_fsm if no event come 【发布时间】:2011-12-29 09:07:49 【问题描述】:

我希望我的 FSM 终止任何时间事件没有在每个状态的指定时间之后发生。

只有在 FSM 创建后没有事件的情况下,我才能通过在 init 回调中指定超时值来实现这种情况,但我希望这个功能也适用于所有状态。

任何简单快捷的解决方案?

最好的问候

马特

【问题讨论】:

【参考方案1】:

您可以在每个状态next_state, NextStateName, NewStateData, Timeout 的返回元组中设置超时。有关更多详细信息,请参阅gen_fsm 文档。但它仅适用于 gen_fsm 中没有任何传入消息的情况,因此它仅适用于例如您希望在可能没有人与之通信时终止进程。如果您想要硬限制(例如协议),您应该使用 erlang:send_after/3erlang:start_timer/3 并处理计时器终止等。

【讨论】:

以上是关于如果没有事件发生,终止 gen_fsm的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 gen_fsm 状态回调中处理任何收到的消息吗?

如果 gen_fsm 没有收到消息,则允许它超时

没有 Springboard 的 iOS:由于没有系统事件服务器而终止

发送消息时确保 gen_fsm/gen_server 进程存在

Android 里面 onTouch事件有没有Up和Down

select函数总结