Hi thanks for looking into the issue (which is driving me nuts) I've defines the following Receiving state: namespace sc = boost::statechart; namespace mpl = boost::mpl; struct EvNewFrame : sc::event< EvNewFrame > {}; struct EvNeedFlowControl : sc::event< EvNeedFlowControl > {}; struct EvDoneReceiving : sc::event<EvDoneReceiving> {}; struct Idle_Receiving; struct ParseFrame; struct Receiving : ICANMonitorClient, sc::state< Receiving, USDTTransmitter, Idle_Receiving > { typedef mpl::list< sc::custom_reaction< EvAbort >, //sc::deferral< EvNewFrame >, sc::transition< EvNewFrame, ParseFrame >, sc::transition< EvDoneReceiving , Finished> > reactions; Receiving( my_context ctx ); ~Receiving(); sc::result react( const EvAbort& ); *virtual void UpdateNewCANMessage(CANMessageId pMsgFilter, TT_CANMsg* pMsg);* TT_CANMsg* newCANMessage; std::vector<_u8> wb; bool DoneReceiving; }; The UpdateNewCANMessage is a callback function defined in the ICANMonitorClient interface. This method is being called when new data frames arrive (that works) but then I want to notify the state machine to proceed to its next state effectively by sending an EvNewFrame event but nothing happens. I tried this->post_event( EvNewFrame() ); // no effect and this->post_event( boost::intrusive_ptr<EvNewFrame>( new EvNewFrame( ) ) ); // no effect (this->terminate() still works in this method on the other hand) Regards On Wed, Mar 25, 2009 at 15:15, Igor R <boost.lists@gmail.com> wrote:
But then when I want to notify the state that the machine is currently in with a post_event this event seems to be discarded even though it should react on it (the machine state has transitions defined for this event and the current state is that state). I also tried using the transit call but that doesn't do anything either.
Do you try to post_event from a state constructor? How is this state defined exaclty? _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users