您的位置:首页 > 其它

boost状态机快速理解例程

2012-03-11 22:26 113 查看
//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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: