首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost Statechart中的多个延迟事件

Boost Statechart中的多个延迟事件
EN

Stack Overflow用户
提问于 2017-01-02 20:58:30
回答 1查看 896关注 0票数 2

在Boost Statechart中,多个延迟事件是如何表现的?

假设我有4个州和3个事件。非延迟的过渡如下:

S1-(E1)-->S2-(E2)-->S3-(E3)-->S4

状态机以S1启动。现在按以下顺序发布事件: E2、E3、E1。

由于这一系列事件,我希望状态机能够到达S4。要做到这一点,我要做什么呢?

  • 显然,我不得不推迟E2和E3在S1中的使用。
  • 我可能还得推迟E3 in S2?否则,当到达S2时,它将被丢弃。

我假设文档的这一部分:event包含答案,但它非常技术性(它描述的是实现而不是语义--本教程也不清楚),并且包含了大量的引用,因此很难确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 09:12:25

您需要使用sc::deferral来实现同样的目标。您想要做的事情可以通过以下代码来实现。

代码语言:javascript
复制
// States
struct S1;
struct S2;
struct S3;
struct S4;


// Events
struct E1 : sc::event<E1> {};
struct E2 : sc::event<E2> {};
struct E3 : sc::event<E3> {};

struct statemachine : sc::state_machine<statemachine, S1>{};

struct S1 : sc::simple_state<S1, statemachine> {
    typedef mpl::list<
        sc::transition< E1, S2 >,
        sc::deferral< E2 >,
        sc::deferral< E3 >
    > reactions;

};

struct S2 : sc::simple_state<S2, statemachine> {
    typedef sc::transition<E2, S3> reactions;
};

struct S3 : sc::simple_state<S3, statemachine> {
    typedef sc::transition<E3,S4> reactions;
};

struct S4 : sc::simple_state<S4, statemachine> {
};

int main() {
    statemachine sm;
    sm.initiate();
// Event Sequence E2 -> E3 -> E1
    sm.process_event(E2());
    sm.process_event(E3());
    sm.process_event(E1());
    return 0;
}

在状态"S1“中,我们推迟了对事件"E2”和"E3“的处理,这些事件随后在状态"S2”和"S3“中处理。

希望一切明朗..。

注意:您需要为使用#include <boost/statechart/deferral.hpp>添加一个头文件sc::deferral

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41433200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档