This document lists the various versions of the port of Miro Samek's
Quantum Framework which encompasses Hierarchical State Machines and
v188.8.131.52 [May 14, 2006]
- The creation of the new threads for a new IQActive instances is
abstracted by a thread factory. The DefaultThreadFactory creates
regular threads. In contrast the ImpersonatingThreadFacotry transfers
the thread secturity token from the calling thread to the new thread.
This is important if the framework is used in conjuction with dynamic
v184.108.40.206 [August 18, 2005]
- David Shields sent me a fix to allow static transitions to be compatible with QHsm inheritance hierarchies
more than 2 levels deep. The changed code can be found in the class TransitionChainStore (QHsm.cs). Thanks, David!
v220.127.116.11 [Jan 27, 2005]
- When compiled under Visual Studio 2005 beta1 the examples
OrthogonalComponent and RunToCompletion raised illegal cross-thread
operation exceptions since the form was accessed from a non-UI. The new
version fixes this issue.
Note: If you use Visual Studio 2005 beta 1 make sure that you deselect Use Console Window under Tools/Options/Debugging/General.
Otherwise you will encounter an illegal cross-thread operation when you
run the console based examples in debug mode. If Use Console Window then Visual
Studio will redirect Console.Write(Line) calls to an output window
controlled by Visual Studio. It turns out that the redirected
Console.Write(Line) is NOT thread-safe while the 'real'
Console.Write(Line) is. I expect this to be fixed in a later release of
Visual Studio 2005.
v18.104.22.168 [Jan 14, 2005]
- In addition to the sln and csproj files for VisualtStudio 2003
and .Net 1.1 a parallel set of solution and project files was added for
VisualStudio 2005 and .Net 2.0 Beta1. The names of the new solution and
project files are derived from the original names by appending
v22.214.171.124 [Sep 18, 2004]
- QHSMs.cs: Fixed a bug in how a transition is recorded. Formerly
was not guaranteed that the final transition to the target state was
- QEventQueue.cs: Added Peek capability to QEventQueue.
- QActive.cs: Changed method name Stop to Abort. Added virtual
method OnExecutionAborted that allows the deriving class to react to
the abort of the active object.
- Samples: OrthogonalComponent.exe is part of the build now and
hence available as an executable.
v126.96.36.199 [Jan 10, 2004]
- QF: This is the first release that provides a (mimimal)
implemention the QF and its associated classes. The goal was to make it
possible to implement the Dining Philosophers Problem. The following
shortcuts were taken:
- There is no event pool. I rely on the garbage collector to
destroy no longer needed event instances. That also allows me to not
implement the event propagation pattern that Miro Samek uses. I.e.,
currently the QF synchronously dispatches events to all the IQActive
objects that subscribed for it and then forgets about the event.
- The event queue is based on a linked list. This means that
in addition to the actual event, the garbage collector also needs to
collect the linked list node that holds the event once it is no longer
needed. Avoiding the linked list nodes in favor of a queue that is
based on an ArrayList should be a worthwile optimization.
- The signature of the state delegate has been changed to use
an IQEvent interface instead of the QEvent base class. All samples have
beeen updated accordingly.
- The previous version stored QState delegates in the static
transition chains. These delegates point to methods on a given instance
of a hierarchical state machine. Hence when events were played back via
a stored transition chain they were played back against state methods
of the specific state machine instance that they were recorded on.
The new version recordes MethodInfo objects instead of QState
delegates. During playback the MethodInfo object is used in conjunction
with the this pointer of the currently executing QHsm to invoke the
correct instance method.
- The population of the transition chain in now
- New Samples:
- Dining Philosophers
- Reminder Pattern [by David Shields]
- Run To Completion with interruptible step [by David
v188.8.131.52 [Dec 20, 2003]:
- New Sample Application CalculatorHSM
provided by David Shields.
Thanks David! The source code for the sample is provided in the
For details please see the associciated readme file in the same
v184.108.40.206 [Dec 12, 2003]:
- OHsm.cs: Fixed bug in the coding of case g) in ExitUpToLCA >
(check each super state of super state ... of my source state == super
> state of super state of ... target state).
- QEvent.cs: This class now overrides the ToString() method to
provide an easy way to debug or log what events are exchanged.
- Assembly HierarchicalStateMachine is now strongly typed. The key
pair QHsm.snk is delivered as part of the source code.
- QHsmTest.cs: Cosmetic changes (better variable names)
v220.127.116.11 [Feb 1, 2003]: Initial release