关于gen_fsm 的一些理解
来源:互联网 发布:cstpcd数据库 编辑:程序博客网 时间:2024/05/20 13:36
gen_fsm module Callback module-------------- ---------------gen_fsm:start_link -----> Module:init/1gen_fsm:send_event -----> Module:StateName/2gen_fsm:send_all_state_event -----> Module:handle_event/3gen_fsm:sync_send_event -----> Module:StateName/3gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4- -----> Module:handle_info/3- -----> Module:terminate/3- -----> Module:code_change/4
1:gen_fsm 可以应用状态机,看了yourihua的Erlang OTP设计原则Gen_Fsm行为 有感。 proc_lib:start_link(
gen_fsm:start_link -> gen:start ->gen:do_spawn ->proc_lib_start_link -> 其实都是通过apply(M,F,A) 最后这是mod:init(Arg) ,所以gen_fsm:start_link 里面代码就有mod:init .gen_fsm:start_link -----> Module:init/1gen_fsm:send_event -----> Module:StateName/2 是init 通过初始化 {ok,static,State }, static 就是StateName, 所以就调用调了 Module:StateName/2 再次调用就可以改变状态了。其实是通过下面实现的,Event这是 gen_fsm:send_event/2 向gen_fsm 发送的状态dispatch({'$gen_event', Event}, Mod, StateName, StateData) -> Mod:StateName(Event, StateData);dispatch({'$gen_all_state_event', Event}, Mod, StateName, StateData) -> Mod:handle_event(Event, StateName, StateData);dispatch({'$gen_sync_event', From, Event}, Mod, StateName, StateData) -> Mod:StateName(Event, From, StateData);dispatch({'$gen_sync_all_state_event', From, Event}, Mod, StateName, StateData) -> Mod:handle_sync_event(Event, From, StateName, StateData);dispatch({timeout, Ref, {'$gen_timer', Msg}}, Mod, StateName, StateData) -> Mod:StateName({timeout, Ref, Msg}, StateData);dispatch({timeout, _Ref, {'$gen_event', Event}}, Mod, StateName, StateData) -> Mod:StateName(Event, StateData);dispatch(Info, Mod, StateName, StateData) -> Mod:handle_info(Info, StateName, StateData).
0 0
- 关于gen_fsm 的一些理解
- 关于JAXB的一些理解
- 关于bitmap的一些理解
- 关于Hook的一些理解
- 关于JavaBean的一些理解
- 关于异常的一些理解
- 关于内存的一些理解
- 关于内存的一些理解
- 关于MFC的一些理解
- 关于编码的一些理解
- 关于枚举的一些理解
- 关于const的一些理解
- 关于矩阵的一些理解
- 关于编码的一些理解
- 关于产品的一些理解
- 关于protobuff的一些理解
- 关于mutex的一些理解
- 关于servlet的一些理解
- OpenLayers filter 过滤器实现查询
- 【黑马程序员】Objective-C语言学习笔记之小知识点
- cf236,div2
- 职场邮件礼仪
- [学习记录]C++定时器功能的实现
- 关于gen_fsm 的一些理解
- IOS工具, 解码,charles,json校验等工具使用地址
- 链式前向星
- 磁学基础 永久磁铁的磁力线分布
- Oracle动态采样详解
- win7 eclipse 编译Launcher源码
- 搭建2003 + iis + php开发平台.
- 在github中的README.md中添加图片
- SringMVC 注解标记备忘