Hello,
your observation is right. Perhaps i should tell a little bit about the current execution semantics.
1. Orthogonal regions allow modeling independent spaces of state. Orthogonality is not interpreted in the sense of 'multithreading'. Since many people confuse parallelism with multithreading we use the term of orthogonality.
2. In this sense an execution order must be defined to make the statechart behavior deterministic. For example is you have states in two orthogonal regions that defines a reaction e / a+=1 in one region and e / a *=2 in the second the execution order is relevant. You can define this order in the property sheet for the statechart of by graphically ordering the regions within a state.
3. Events are just visible within a single run-to-completion-step. So it is possible to react on outgoing and local events only in lower order regions.
4. We apply single step execution semantics. This means a run-to-completion-step just performs a transition from one state configuration to the next.
5. An cycle bases approach is implemented what means that it is possible to react to multiple events with in a run-to-completion-step in contrast to a pure event driven approach where one event is processed after another.
This together leads to your observation. We consider this to be a kind of baseline execution semantics that targets towards a minimum resources consumption (memory and processor cycles).
Your questions are not new and of course there are variants of execution semantics that are relevant in different scenarios. We plan to add further features step by step. On of those features are "delayed events" that become visible in the next cycle and thus can be consumed within any region.
So far you can alternatively use variables to 'communicate' between regions. Additionally there is the active() function, that lets you test for active states.
Best regards,
Axel
Orthogonality Regions are ordered. This
> --
>
>