gpt4 book ai didi

c++ - Boost Statechart 中的多个延迟事件

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:26 25 4
gpt4 key购买 nike

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

假设我有 4 个状态和 3 个事件。非延迟转换如下所示:

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

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

作为这一系列事件的结果,我希望状态机达到 S4。我需要做什么才能实现这一目标?

  • 我显然必须推迟 S1 中的 E2 和 E3。
  • 我可能还必须在 S2 中推迟 E3?我想否则它会在达到 S2 时被丢弃。

我假定文档的这一部分:http://www.boost.org/doc/libs/1_55_0/libs/statechart/doc/reference.html#process_event包含答案,但它是非常技术性的(与其说是语义的描述,不如说是对实现的描述——教程也不是很清楚),并且包含很多引用资料,所以很难确定。

最佳答案

您需要使用 sc::deferral实现相同。您可以通过以下代码实现您想要执行的操作。

// 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;
}

在 STATE "S1"中,我们推迟了事件 "E2"和 "E3"的处理,这些事件随后在 STATE "S2"和 "S3"中处理

希望它清楚..

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

关于c++ - Boost Statechart 中的多个延迟事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com