boost状态机快速理解例程

这是一个使用Boost库在VS2005下编译通过的状态机例程,旨在帮助快速理解状态机的工作原理。程序定义了事件A和事件B,以及初始状态和状态A。当触发事件A时,状态从初始状态转换到状态A;触发事件B,则从状态A返回初始状态。程序运行时会输出相应的状态转换信息。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

//boost状态机快速理解例程,VS2005编译通过!
//参考网络上资料改写,主要目的为自己备忘用。欢迎技术交流、项目合作!
//为方便快速理解,非关键字均已修改为中文!希望能抛砖引玉!

#include "stdafx.h"
#include <Windows.h>
#include <boost/statechart/event.hpp>
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/transition.hpp>
#include <iostream>


using namespace boost::statechart;//namespace sc = boost::statechart;
class 初始状态;
class 状态A;

//////////////////////事件/////////////////////////////////
class 事件A : public event<事件A>
{
public:
事件A(void)
{
std::cout << "#触发事件A" << std::endl << std::endl;
}
};

class 事件B : public event<事件B>
{
public:
事件B(void)
{
std::cout << "#触发事件B" << std::endl << std::endl;
}
};

////////////////////////////////////////////////////////////
class 状态机 : public state_machine<状态机, 初始状态>
{
public:
状态机(void)
{
std::cout << "创建 状态机" << std::endl << std::endl;
}

~状态机(void)
{
std::cout << "销毁 状态机" << std::endl << std::endl;
}
};
////////////////////////////////////////////////////////////

/////////////////////初始状态//////////////////////////////////
class 初始状态 : public simple_state<初始状态, 状态机>
{
public:
//reactions为关键字!
typedef transition<事件A, 状态A> reactions;//当发生事件A时,切换状态至状态A

初始状态(void)
{
std::cout << "进入 初始状态" << std::endl;
}

~初始状态(void)
{
std::cout << "离开 初始状态" << std::endl;
}
};

/////////////////////状态A//////////////////////////////////
class 状态A : public simple_state<状态A, 状态机>
{
public:
//reactions为关键字!
typedef transition<事件B, 初始状态> reactions;//当发生事件B时,切换状态至状态B

状态A(void)
{
std::cout << "进入 状态A" << std::endl;
}

~状态A(void)
{
std::cout << "离开 状态A" << std::endl;
}
};


int _tmain(int argc, _TCHAR* argv[])
{
状态机 状态机实例;
状态机实例.initiate();
状态机实例.process_event(事件A());
状态机实例.process_event(事件B());

return 0;
}


开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值