所有的状态事件

有时候,在gen_fsm的任何状态都有可能有事件到达。除了可以用 gen_fsm:send_event/2 发送消息,并为每一个状态函数写一个子句来处理事件之外,还可以通过 gen_fsm:send_all_state_event/2 来发送消息,并用 Module:handle_event/3 来处理。

  1. -module(code_lock).
  2. ...
  3. -export([stop/0]).
  4. ...
  5.  
  6. stop() ->
  7. gen_fsm:send_all_state_event(code_lock, stop).
  8.  
  9. ...
  10.  
  11. handle_event(stop, _StateName, StateData) ->
  12. {stop, normal, StateData}.