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
> But then when I want to notify the state that the machine is currently inDo you try to post_event from a state constructor? How is this state
> 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.
defined exaclty?
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users