$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Andreas Huber (ah2003_at_[hidden])
Date: 2004-05-27 11:51:16
E. Gladyshev <egladysh <at> yahoo.com> writes:
> > boost::fsm does exactly this and in a generic fashion.
>
> Does it mean that the state machine framework allows
> me to specify what event it will generate
> for a particular exception type?
Yes, you can do that if you want (it is a per state machine policy). The
default is to always dispatch an exception_thrown event.
> If so does it mean that all unspecified exceptions
> won't be caught by the framework?
Yes, you can do that. The default is to catch all exceptions.
> > This is the traditional way of dealing with failures in state machines. It
> > works, but it is cumbersome.
>
> Why is it cumbersome?
Because you have to write lots boiler-plate code yourself (catch the exception
and post the error event in a lot of actions). The framework can automate this
for you.
> > Why not let the exception slip out of the action and let the state machine
> > framework:
> > 1. catch the exception
> > 2. generate an appropriate event
> > 3. dispatch that event to the appropriate state (see docs for details)
> > 4. check that the event has indeed been processed and that the machine is
back
> > in a stable state
> >
>
> If the framework knows all possible exception types
> and appropriate events associated with them, then
> this should work just fine.
It doesn't typically have to. I think the default behavior is ok for most
projects. See http://tinyurl.com/2uzs5, Discriminating exceptions.
> The only problem I have is #4.
> If all exceptions are expected, why do you need
> any special checks that the event has indeed
> been processed. In this case, any exception
> is just a normal event (just like any other event)
> and the state machine is never in an unstable state.
> What do you mean exactly by stable/unstable state?
See http://tinyurl.com/2bjjw, Unstable state machine
> It sounds kind of disturbing to me when
> a generic state machine framework defines
> some sort of unstable states on its own.
I don't think so, the behavior is clearly defined and just automates what
you'd do manually anyway.
Regards,
Andreas