gen_fsm 初始状态,在生成时向其发送事件
如果我想在生成 gen_fsm 时始终将事件发送到 gen_fsm 的初始状态,那么我应该将该函数调用放在哪里?紧接在 start_link 之后或从首先调用 start_link 的进程开始。这里有什么最佳实践吗?
If I want to always send an event to the initial state of a gen_fsm when I have spawned it, where should I put that function call? Right after start_link or from the process that invoked start_link in the first place. Are there any best practices here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您只想在启动后更改 FSM 的状态,您可以简单地为状态机实现 init 函数:
阅读自: http://www.erlang.org/doc/man/gen_fsm.html#Module:init-1
另外,使用 init 函数,您可以确定两个函数(start_link 和 init)的原子性。他们都会成功或失败。
If you just want to alter the state of the FSM after you start it, you might simply implement the init function for your state machine:
Reading from: http://www.erlang.org/doc/man/gen_fsm.html#Module:init-1
Also, using the init function, you're sure about the atomicity of the two functions (start_link and init). They will both succeed or fail.
我认为从调用 FSM 启动函数的进程中发送第一个事件是正确的。或者从 init/1 返回 timeout = 0 并在初始状态下处理“timeout”事件。
另一方面,如果您的 gen_fsm 是一个注册进程,则它使竞争成为可能。如果是这种情况,我会在注册之前从 init/1 向 gen_fsm 进程 PID 发送消息。
I thik it is right to send first event from the process invoking FSM start function. Or return timeout = 0 from init/1 and handle 'timeout' event in the initial state.
On the other hand, it makes races possible if your gen_fsm is a rgistered process. If that is the case I would send message to the gen_fsm process PID from init/1 befor registering.