如果我想在生成gen_fsm时始终将事件发送到gen_fsm的初始状态,那么我应该在哪里放置该函数调用?在start_link之后或者从第一个调用start_link的进程开始.这里有最好的做法吗?
如果您只想在启动后更改FSM的状态,则可以简单地为状态机实现init函数:
阅读:http://www.erlang.org/doc/man/gen_fsm.html#Module: init-1
每当使用gen_fsm:start/3,4或gen_fsm:start_link/3,4启动gen_fsm时,新进程将调用此函数进行初始化.
Args是提供给start函数的Args参数.
如果初始化成功,该函数应返回{ok,StateName,StateData},{ok,StateName,StateData,Timeout}或{ok,StateName,StateData,hibernate},其中StateName是初始状态名称,StateData是初始状态数据gen_fsm.
此外,使用init函数,您可以确定两个函数(start_link和init)的原子性.他们都会成功或失败.