This is an old revision of the document!
Sequencer Usage
This page describes the usage of the sequencer in the EEROS framework.
Subsequence
A subsequence is a sequence which is called by another sequence. Such a subsequence can be called in a blocking or non-blocking way. Blocking means that the step waits (or blocks) until the subsequence has finished. Non-blocking means that subsequence and main sequence run concurrently.
Blocking Call of a Subsequence
If you want to save your own data in the sequence, you need to create a new instance of a sequence. This should be done in the desired step (method) of the superior sequence. e.g. in the method MoveBlocking()
MyBlockingSubSequence* subSequence = dynamic_cast<MyBlockingSubSequence*>eeros::sequencer::Sequence::getSequence("BlockingSubSequence")); if(!subSequence){ //callerThread for Blocking Sub Sequence is the same as is in this running Sequence. subSequence = new MyBlockingSubSequence("BlockingSubSequence", callerThread); }
Note:
- In the above lines only one object of MyBlockingSubSequence with the name BlockingSubSequence is created.
- It is not allowed to call the callerThread.addRunnable(this) method, because the superior sequence calls the blocking sub-sequence directly by the run() method.
To start the sub-sequence just call run(), which calls all methods in the callback list (filled by fillCallBacks()). Be sure that the sub-sequence is terminated before you restart it. This could happen, for example, in an exception handling ( Error Handler ).
//Here we wait for the returning of the subSequence.run() method while(subSequence->getState() != eeros::sequencer::kSequenceFinished){ subSequence->run(); }