【问题标题】:Notification about state change in Boost Statechart关于 Boost Statechart 中状态变化的通知
【发布时间】:2015-12-07 05:16:02
【问题描述】:

是否有一种直接的方法可以在 Boost Statechart 中注册状态更改?

对于Digital Camera 示例,假设我决定向应用程序添加一个GUI。除了查询状态之外,是否有可能通知状态之间的转换?

if(0 != state_cast<const State1 *>())
{
    context<OuterCotext>().Notify(1);
}
else if(0 != state_cast<const State2 *>())
{
    context<OuterCotext>().Notify(2);
}

【问题讨论】:

    标签: c++ boost state-machine boost-statechart


    【解决方案1】:

    了解您已更改状态的最简单方法是进入前一个状态的析构函数,然后进入新状态的构造函数。

    #include <boost/statechart/state_machine.hpp>
    #include <boost/statechart/simple_state.hpp>
    #include <iostream>
    
    namespace sc = boost::statechart;
    
    struct Greeting;
    struct Machine : sc::state_machine< Machine, S1> {};
    
    struct S1 : sc::simple_state<S1, Machine>
    {
        S1() 
        { // entry
            std::cout << "Enter S1\n"; 
        } 
        ~S1() 
        { // exit
            std::cout << "Exit S1\n"; 
        } 
    };
    
    int main()
    {
        Machine myMachine;
        myMachine.initiate();
    
        return 0;
    }
    

    Demo

    boost.statechart 中,onEntry/onExit 操作由constructor/destructor 对实现,因为状态实例仅在状态是机器的当前状态时才有效。

    因此,您想要记录、注册、登录状态更改(进入或退出)的所有内容都可以在这些特殊功能中完成。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2011-03-07
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多