#include <ExecutionEngine.hpp>
An execution engine serialises (executes one after the other) the execution of all commands, programs, state machines and incomming events for a task. Any function executing in the same execution engine is guaranteed to be thread-safe with respect to other functions executing in the same execution engine.
The ExecutionEngine bundles a internal::CommandProcessor, scripting::ProgramProcessor, scripting::StateMachineProcessor and MessageProcessor.
Definition at line 77 of file ExecutionEngine.hpp.
RTT::ExecutionEngine::ExecutionEngine | ( | base::TaskCore * | owner = 0 | ) |
Create an execution engine with a internal::CommandProcessor, scripting::ProgramProcessor and StateMachineProcessor.
owner | The base::TaskCore in which this execution engine executes. It may be null, in that case no base::TaskCore owns this execution engine. |
Definition at line 74 of file ExecutionEngine.cpp.
Definition at line 82 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::addChild | ( | base::TaskCore * | tc | ) | [virtual] |
Add a base::TaskCore to execute.
Definition at line 109 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::breakLoop | ( | ) | [protected, virtual] |
This method is called by the framework to break out of the loop() method. Reimplement this method to signal loop() to return and return true on success. When this method is not reimplemented by you, it will always return false, denoting that the loop can not be broken. If breakLoop() returns true, the caller will wait until loop() returns.
Reimplemented from RTT::base::RunnableInterface.
Definition at line 427 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::finalize | ( | ) | [protected, virtual] |
The method that will be called after the last periodical execution of step() ( or non periodical execution of loop() ), when the RunnableInterface is stopped.
Implements RTT::base::RunnableInterface.
Definition at line 463 of file ExecutionEngine.cpp.
The base::TaskCore which created this ExecutionEngine.
Definition at line 105 of file ExecutionEngine.cpp.
base::TaskCore* RTT::ExecutionEngine::getTaskCore | ( | ) | const [inline] |
Returns the owner of this execution engine.
Definition at line 109 of file ExecutionEngine.hpp.
bool RTT::ExecutionEngine::hasWork | ( | ) | [protected, virtual] |
This method is for 'intelligent' activity implementations that wish to see if it is required to call step() (again). By default, false is returned. You should only return true in case there is a temporary reason to (re-)run step.
Reimplemented from RTT::base::RunnableInterface.
Definition at line 222 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::initialize | ( | ) | [protected, virtual] |
The method that will be called before the first periodical execution of step() ( or non periodical execution of loop() ), when the thread is started.
Implements RTT::base::RunnableInterface.
Definition at line 217 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::process | ( | base::DisposableInterface * | c | ) | [virtual] |
Queue and execute (process) a given message. The message is executed in step() or loop() directly after all other queued ActionInterface objects. The constructor parameter queue_size limits how many messages can be queued in between step()s or loop().
Definition at line 249 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::processChildren | ( | ) | [protected] |
Definition at line 363 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::processFunctions | ( | ) | [protected] |
Definition at line 119 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::processMessages | ( | ) | [protected] |
Definition at line 227 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::removeChild | ( | base::TaskCore * | tc | ) | [virtual] |
Remove a base::TaskCore from execution.
Definition at line 113 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::removeFunction | ( | base::ExecutableInterface * | f | ) | [virtual] |
Remove a running function added with runFunction. This method is only required if the function is to be destroyed and is still present in the Engine.
Definition at line 168 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::removeSelfFunction | ( | base::ExecutableInterface * | f | ) | [virtual] |
Self-removal for a running function added with runFunction. You must call this variant in case you want yourself to be removed. Equivalent to returning false in ExecutableInterface::execute().
Definition at line 198 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::runFunction | ( | base::ExecutableInterface * | f | ) | [virtual] |
Run a given function in step() or loop(). The function may only be destroyed after the ExecutionEngine is stopped or removeFunction() was invoked. The number of functions the Processor can run in parallel can be increased with setMaxFunctions().
Definition at line 138 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::setActivity | ( | base::ActivityInterface * | task | ) | [virtual] |
Overwritten version of RTT::base::RunnableInterface::setActivity(). This version will also set the master ExecutionEngine if the new activity is a SlaveActivity that runs an ExecutionEngine.
task | The ActivityInterface running this interface. |
Reimplemented from RTT::base::RunnableInterface.
Definition at line 297 of file ExecutionEngine.cpp.
Set the 'owner' task in the exception state.
Definition at line 448 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::setMaster | ( | ExecutionEngine * | master | ) |
Set the master ExecutionEngine. If set, all incoming messages are forwarded to the master.
master | The new master ExecutionEngine. |
Definition at line 292 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::step | ( | ) | [protected, virtual] |
Executes (in that order) Messages, Functions and updateHook() functions of this TaskContext and its children.
Implements RTT::base::RunnableInterface.
Definition at line 357 of file ExecutionEngine.cpp.
bool RTT::ExecutionEngine::stopTask | ( | base::TaskCore * | task | ) |
Stops executing the updateHook of task. This is an explicit synchronisation point, which guarantees that updateHook is no longer executed when this function returns true.
task | The Task calling this function and whose updateHook should no longer be executed. |
Definition at line 437 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::waitAndProcessFunctions | ( | boost::function< bool(void)> const & | pred | ) | [protected] |
Call this if you wish to block on a function completing in the Execution Engine and execute it.
pred | As long as !pred() waits and processes functions. If pred() == true when entering this function, then no functions will be processed and this function returns immediately. |
This function is for internal use only and is required for asynchronous function invocations.
Definition at line 339 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::waitAndProcessMessages | ( | boost::function< bool(void)> const & | pred | ) | [protected] |
Call this if you wish to block on a message arriving in the Execution Engine and execute it.
pred | As long as !pred() waits and processes messages. If pred() == true when entering this function, then no messages will be processed and this function returns immediately. |
This function is for internal use only and is required for asynchronous method invocations.
Definition at line 321 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::waitForFunctions | ( | const boost::function< bool(void)> & | pred | ) |
Call this if you wish to block on a function completing in the Execution Engine. Each time a function completes, waitForFunctions will return when pred() returns true.
pred | As long as !pred() blocks the calling thread. If pred() == true when entering this function, returns immediately. |
This function is for internal use only and is required for asynchronous function invocations.
Definition at line 284 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::waitForMessages | ( | const boost::function< bool(void)> & | pred | ) |
Call this if you wish to block on a message arriving in the Execution Engine. Each time one or more messages are processed, waitForMessages will return when pred() returns true.
pred | As long as !pred() blocks the calling thread. If pred() == true when entering this function, returns immediately. |
This function is for internal use only and is required for asynchronous method invocations.
Definition at line 269 of file ExecutionEngine.cpp.
void RTT::ExecutionEngine::waitForMessagesInternal | ( | boost::function< bool(void)> const & | pred | ) | [protected] |
Call this if you wish to block on a message arriving in the Execution Engine. Each time one or more messages are processed, waitForMessages will return when pred() returns true.
pred | As long as !pred() blocks the calling thread. If pred() == true when entering this function, the returns immediately. |
This function is for internal use only and is required for asynchronous method invocations.
Definition at line 309 of file ExecutionEngine.cpp.
std::vector<base::TaskCore*> RTT::ExecutionEngine::children [protected] |
Definition at line 256 of file ExecutionEngine.hpp.
Stores all functions we're executing.
Definition at line 261 of file ExecutionEngine.hpp.
ExecutionEngine* RTT::ExecutionEngine::mmaster [protected] |
A master ExecutionEngine which should process our messages. This is used for ExecutionEngines running in a SlaveActivity which forward incoming messages to their master engine.
Definition at line 270 of file ExecutionEngine.hpp.
Our Message queue
Definition at line 254 of file ExecutionEngine.hpp.
os::Condition RTT::ExecutionEngine::msg_cond [protected] |
Definition at line 264 of file ExecutionEngine.hpp.
os::Mutex RTT::ExecutionEngine::msg_lock [protected] |
Definition at line 263 of file ExecutionEngine.hpp.
base::TaskCore* RTT::ExecutionEngine::taskc [protected] |
The parent or 'owner' of this ExecutionEngine, may be null.
Definition at line 249 of file ExecutionEngine.hpp.