1 #include <boost/statechart/state_machine.hpp>
3 #include <boost/statechart/event_base.hpp>
4 #include <boost/statechart/state.hpp>
8 namespace sc = boost::statechart;
11 template< class MostDerived,
13 class Inner = boost::mpl::list<> >
14 struct TimedState : boost::statechart::state<MostDerived, Context, Inner>
17 typedef TimedState base_state;
18 typedef typename boost::statechart::state<MostDerived, Context, Inner> base_type;
19 #define global_timer_list base_type::outermost_context().my_handle()->timer_list_.timeouts
21 std::list<Timer *> active_timers;
22 TimedState(typename base_type::my_context ctx ) : base_type( ctx ) {
23 // std::cout<<typeid(MostDerived).name()<<" global"<<std::endl;
26 if(global_timer_list.size()>0 && active_timers.size()>0)
28 std::list<Timer *>::iterator it;
29 for(it = active_timers.begin(); it!= active_timers.end(); it++)
31 global_timer_list.remove(*it);
33 //std::cout<<"delka "<<global_timer_list.size()<<std::endl;
36 void runTimer(Timer &t, long int milisec, const boost::intrusive_ptr< boost::statechart::event_base > &e)
38 base_type::outermost_context().my_handle()->timer_list_.addTimer(t, milisec, e);
39 active_timers.push_back(&t);
43 template< class MostDerived,
45 class Inner = boost::mpl::list<> >
46 struct TimedSimpleState : boost::statechart::simple_state<MostDerived, Context, Inner>
49 typedef TimedSimpleState base_state;
50 typedef typename boost::statechart::simple_state<MostDerived, Context, Inner> base_type;
51 #define global_timer_list base_type::outermost_context().my_handle()->timer_list_.timeouts
53 std::list<Timer *> active_timers;
55 // std::cout<<typeid(MostDerived).name()<<" global"<<std::endl;
58 if(global_timer_list.size()>0 && active_timers.size()>0)
60 std::list<Timer *>::iterator it;
61 for(it = active_timers.begin(); it!= active_timers.end(); it++)
63 global_timer_list.remove(*it);
65 //std::cout<<"delka "<<global_timer_list.size()<<std::endl;
68 void runTimer(Timer &t, long int milisec, const boost::intrusive_ptr< boost::statechart::event_base > &e)
70 base_type::outermost_context().my_handle()->timer_list_.addTimer(t, milisec, e);
71 active_timers.push_back(&t);