erlang gen_fsm

自己写的简单的  gen_fsm有限状态机的小例子:

-module(test_fsm).

-export([start_link/0,stand/2,move/2,dead/2,stop/0]).
-export([handle_stand/0,handle_move/0]).

-behaviour(gen_fsm).

%%
-export([init/1,handle_info/3,handle_event/3,handle_sync_event/4,code_change/4,terminate/3]).

%%
start_link() ->
	gen_fsm:start_link({local,?MODULE},?MODULE,[],[]).
	
%%

init([])->
	io:format("init....~n",[]),
	{ok,stand,stand}.

handle_info(_Info,_StateName,_State) ->
	{next_state,_StateName,_State}.
	
handle_event(_Event,StateName,State) ->
	{next_State,StateName,State};
handle_event(stop,StateName,State) ->
	{stop,normal,State}.
	
handle_sync_event(_Event,_From,StateName,State) ->
	Reply = ok,
	{reply,Reply,StateName,State}.
	
code_change(_OldVsn,StateName,State,_Extra) ->
	{ok,StateName,State}.
	
terminate(_Reason,_StateName,_State) ->
	io:format("terminate......~n",[]),
	ok.
	
stand(stand,State) ->
	io:format("stand....~n",[]),
	{next_state,move,State}.
move(move,State) ->
	io:format("move......~n",[]),
	{next_state,dead,State,5000}. %%五秒后将执行死亡
	
dead(timeout,State) ->
	io:format("dead.........~n",[]),
	proc_lib:hibernate(gen_fsm, enter_loop, [?MODULE, [], stand,State]). %%清空stack,重新进入stand
	%%{next_state,stand,State}.

%%==============外部接口函数==============	
handle_stand() ->
	gen_fsm:send_event(?MODULE,stand).
	
handle_move() ->
	gen_fsm:send_event(?MODULE,move).

%%======================stop===
stop() ->
	gen_fsm:send_all_state_event(?MODULE,stop).


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值