boost 里面有状态机了_boost 状态机学习

本文介绍了如何使用Boost库中的Statechart模块实现状态机。通过示例展示了从简单到复杂的状态机设计,包括初始状态、转换事件、中间状态和结束状态的映射。讲解了复合状态、事件处理、状态转换、延迟处理、历史记录等概念,并通过数码相机的操作状态为例,详细阐述了状态机的构建和工作原理。
摘要由CSDN通过智能技术生成

今天看到boost有个库叫做statechart. 不禁兴趣较大,学习了一下,受益匪浅.

大体来说,这个库处理了大部分状态机uml中涉及到的点.

1. 简单状态处理

如上图,我们暂时认为acive是一个简单状态而不是一个复合状态. 那么按照状态机来说,有几个元素呢?

1) 初始状态

2) 转换事件/action

3) 中间状态

4) 结束状态 (暂无)

那么boost::statechart 重现过后,有如下对应对象

1) state_machine

2) simple_state / state

3) event

4) transition / reaction

我们来看看大致的代码对应:

1. 定义一个状态机对象

struct Machine : sc::state_machine{

Machine()

{

std::cout << __FUNCTION__ << std::endl;

}

~Machine()

{

std::cout << __FUNCTION__ << std::endl;

}

};

2. 定义初始状态对象

struct StatActive : sc::simple_state{

typedef sc::transitionreactions;

StatActive()

{

m_lElapsed = 0;

std::cout << __FUNCTION__ << std::endl;

}

~StatActive()

{

std::cout << __FUNCTION__ << std::endl;

}

};

3. 定义转化,注意第二步中已经贴出转换步骤代码,即typedef 部分

4. 启动状态机

Machine machine;

machine.initiate();

machine.process_event(EvReset());

machine.terminate();

就这样一个简单的状态机以及其相关的逻辑均已经体现.

下面我们来看一个复杂点的状态机,一个数码相机的例子;

先来分析一下这个状态机有哪些元素:

1. 有3个状态

1) notshooting (复合)

2) shooting (复合)

3) storing (基本)

所谓基本和复合大致的区别是符合状态内部还有小的状态机.

2. 有如下几种动作转换

1) HalfPress

a) 自动对焦模式

b) 手动对焦模式

2) FullPress

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值