Skip to content

Controlling a state machines life cycle

In addition to the events and variables which are declared by the statechart, also additional life cycle operations exist. As explained before (see type IStatemachine in previous chapter), they implicitly exist for each state machine and can be used to control its life cycle.

operation purpose
enter() : void An inactive state machine can be activated by calling this operation. During activation the initial state will be activated and all required entry actions are executed. A state machine is inactive by default after creation.
exit() : void A call to exit deactivates an active state machine. During exit, all active states will be exited and all relevant exit actions will be executed. After exit, no state is active.
isActive() : boolean Returns true if the state machine is active and false otherwise. A state machine is active if there is at least one active state. This operation can be used in guards to test the life cycle state of a state machine.
isStateActive(state) : boolean Can be used in guards to check the activation of a specific state. The state parameter must be of the state machines state enumeration type.
isFinal() : boolean Returns true if all active states are final states. The final state won’t change until the state machine is exited and reentered. This operation can be used in guards to check if a state machine has finished its work.
runCycle() : void Performs a state machine run-to-completion step. If a state machine takes full control of a cycle-based state machine then it has to decide when the run-to-completion step must be executed.
triggerWithoutEvent() : void For EventDriven statecharts, it performs a state machine run-to-completion step without raising any event. It can be also used by the client code.

Using these operations implies a tighter semantic coupling of separate state machines. It is the basis for the implementation of sub state machines as described in the following chapter.

An example for using life cycle operations is given in: