eeros_architecture:sequencer:sequence
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
eeros_architecture:sequencer:sequence [2018/08/07 12:49] – [Waiting for Sequences to Finish] graf | eeros_architecture:sequencer:sequence [2024/12/01 11:50] (current) – [Waiting for Sequences to Finish] ursgraf | ||
---|---|---|---|
Line 5: | Line 5: | ||
A main feature of a sequence is whether it blocks the flow of control during running through its steps or whether the steps run in parallel to the main flow of control. | A main feature of a sequence is whether it blocks the flow of control during running through its steps or whether the steps run in parallel to the main flow of control. | ||
[{{ : | [{{ : | ||
- | Sequence A runs. That is, all its steps run consecutively. After step 1 is done the sequence B is called. As B is blocking its two steps run while A is being blocked. Only after B finishes does the control return back to A where step 2 and step 3 are then executed. After this sequence C is called. As C is nonblocking its two steps run in parallel to the remaining steps of sequence A. A must wait for C to finish by calling //join//. \\ | + | Sequence A runs. That is, all its steps run consecutively. After step 1 is done the sequence B is called. As B is blocking its two steps run while A is being blocked. Only after B finishes does the control return back to A where step 2 and step 3 are then executed. After this sequence C is called. As C is nonblocking its two steps run in parallel to the remaining steps of sequence A. A must wait for C to finish by calling //wait()//. \\ |
A nonblocking sequence will run in its own thread of execution while a blocking sequence always runs in the same thread as the calling sequence. | A nonblocking sequence will run in its own thread of execution while a blocking sequence always runs in the same thread as the calling sequence. | ||
Line 29: | Line 29: | ||
class Move : public Step { | class Move : public Step { | ||
public: | public: | ||
- | Move(std:: | + | Move(std:: |
int operator() (double x, double y) {xPos = x; yPos = y; return start();} | int operator() (double x, double y) {xPos = x; yPos = y; return start();} | ||
int action() { | int action() { | ||
robot.setValue(xPos, | robot.setValue(xPos, | ||
+ | return 0; | ||
} | } | ||
bool checkExitCondition() { | bool checkExitCondition() { | ||
Line 42: | Line 43: | ||
class MoveSequence : public Sequence { | class MoveSequence : public Sequence { | ||
public: | public: | ||
- | MoveSequence(std:: | + | MoveSequence(std:: |
int action() { | int action() { | ||
robot.moveXY(10, | robot.moveXY(10, | ||
robot.moveXY(15, | robot.moveXY(15, | ||
robot.moveXY(22, | robot.moveXY(22, | ||
+ | return 0; | ||
} | } | ||
private: | private: | ||
Line 56: | Line 58: | ||
===== Waiting for Sequences to Finish ===== | ===== Waiting for Sequences to Finish ===== | ||
- | Usually at some stage in your program you have to wait for a given sequence to finish until the program should continue. | + | Usually at some stage in your program you have to wait for a given sequence to finish until the program should continue. |
- | The former waits for a given sequence to finish running. It returns as soon as all the steps defined in the sequence have completed to run. However, it does not terminate | + | This method |
- | On the other hand, '' | + | |
- | IMPORTANT | + | |
eeros_architecture/sequencer/sequence.1533638950.txt.gz · Last modified: 2018/08/07 12:49 by graf