惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - Jeff

4个月 POJ1019 POJ1035 POJ1007 POJ1005 ONLINE_JUDGE Linux shell定时器 怪异的grep结果 URL2FILE C primer笔记 Vxworks增加system call C语言常用宏定义技巧 分苹果 Socket 为什么选择SMP而不是AMP RTP memory in Vxworks Windriver的项目类型 RTP affinity Symmetric multiprocessing (SMP)
C++ 有限状态机
Jeff · 2012-03-08 · via 博客园 - Jeff

2012-03-08 22:10  Jeff  阅读(3718)  评论()    收藏  举报

用一个类定义事件和状态
文件:GlobalAutoDcl.h
Const int NbMaxAction =10;
Const int NbMaxState =5;
Const int NbMaxEvent =6;
Class GlobalAutoDcl{
public:
typedef enum {
event0 = 0;
event1 =1;
.......
}
typedef enum {
state0  = 0;
state1   =1;
.......
}
}
用一个抽象类定义一些数组,Action等:
文件: GlobalAuto.h
class GlobalResetAuto{
public:
protected:
//定义action的函数指针类型
typedef GlobalAutoDcl::StateForGlobalReset_t 
(GlobalAuto::*fPtr) (Signal *);
//定义一个Action的表
static fPtr ActionTable[NbMaxAction];
// 定义一个state/event的二维数组
static unsigned char Automaton[NbMaxState ][NbMaxEvent];
//二维数组的值就是Action,对应的state,event
// 定义虚函数,也就是Action函数
// 注意函数名字定义,由state和event组成,表示这个action是在此state下收到此event
virtual GlobalAutoDcl::State_t  state1_event2(Signal *msg) =0;
virtual GlobalAutoDcl::State_t  state3_event5(Signal *msg) =0;
// 此类中通常还包括如下方法定义
//  1.  返回当前state
//   2. 把当前state和event转换成字符串
//   3. ActionTable的初始化调用函数
//    4. 初始化Action数组的函数(也可以不放这里)
}
在globalauto.h文件中方法的具体实现
文件: globalauto.cpp
// 上面的state/event数组可以放在这里初始化
// Action也可以放在这里初始化
// 通常还会增加debug功能,记录过去发生的event
// 一个接收input signal的函数, 传进来的event应该包含event, 而state是本地有的
// 然后调用action中的函数指针,更改新state