多个延迟事件如何在Boost状态图中表现?
我们说我有4个州和3个事件。非延迟转换如下所示:
S1 - (E1) - > S2 - (E2) - > S3 - (E3) - > S4
状态机在S1中启动。现在事件按以下顺序发布:E2,E3,E1。
我希望状态机由于这一系列事件而达到S4。为了达到这个目的,我该怎么做?
我假设文档的这一部分:http://www.boost.org/doc/libs/1_55_0/libs/statechart/doc/reference.html#process_event包含答案,但它非常技术性(相当于实现的描述而不是语义 - 教程也不清楚),并且包含很多引用,所以很难确定。
答案 0 :(得分:3)
您需要使用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&#34; S1&#34; ,我们推迟处理事件&#34; E2&#34;和&#34; E3&#34;随后在STATE&#34; S2&#34;和&#34; S3&#34;
希望清楚......
注意:您需要添加头文件
#include <boost/statechart/deferral.hpp>
使用sc::deferral