Boost StateChart状态机学习

最近在使用stateChart状态机时遇到一些问题,记录一下

简介
1、定义一个继承自state_machine的结构体作为状态机主体,内部可包含一些切换状态机的接口以及响应不同事件的函数
2、定义一系列状态结构体,继承自simple_state或state(若在entry reaction或exit reaction中需要调用部分函数如post_event()等则需继承后者),表示状态机可处的状态以及不同状态中相应的行为
3、定义一系列事件,继承自event,可通过状态机的process_event()和post_event()等来发出事件并调用不同的reaction

  • entry/exit reaction中不可使用process_event()
    entry reaction即为状态构造函数,若需要在该区域发布事件应使用post_event(),另外,虽然在custom_reaction和in_state_reaction中可使用process_event,但推荐使用post_event代替。

  • entry/exit reaction中不可使用transit()
    状态正在切换时,不可强行转换状态,若需要在reaction结束后转换状态,推荐使用post_event发布一个事件,并定义相应的transition响应。

  • process_event会等到所有reaction结束才返回
    使用process_event发布事件后,会等到所有相应reaction结束后(若某reaction中又发布了新事件,同时会等待新事件所有相应结束)返回。

  • state_machine为非线程安全的
    根据上一条,多线程使用process_event,容易造成程序崩溃,需要使用多线程时,应使用异步状态机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值