Fawkes API
Fawkes Development Version
|
Fawkes default main thread. More...
#include <>>
Classes | |
class | Runner |
Utility class to run the main thread. More... | |
Public Member Functions | |
FawkesMainThread (Configuration *config, MultiLogger *multi_logger, ThreadManager *thread_manager, PluginManager *plugin_manager, const char *load_plugins, const char *default_plugin=0) | |
Constructor. More... | |
virtual | ~FawkesMainThread () |
Destructor. More... | |
virtual void | once () |
Execute an action exactly once. More... | |
virtual void | loop () |
Code to execute in the thread. More... | |
virtual void | set_mainloop_thread (Thread *mainloop_thread) |
Set a new main loop. More... | |
void | full_start () |
Start the thread and wait until once() completes. More... | |
MultiLogger * | logger () const |
Get logger. More... | |
![]() | |
virtual | ~Thread () |
Virtual destructor. More... | |
virtual void | init () |
Initialize the thread. More... | |
bool | prepare_finalize () |
Prepare finalization. More... | |
virtual bool | prepare_finalize_user () |
Prepare finalization user implementation. More... | |
virtual void | finalize () |
Finalize the thread. More... | |
void | cancel_finalize () |
Cancel finalization. More... | |
void | start (bool wait=true) |
Call this method to start the thread. More... | |
void | cancel () |
Cancel a thread. More... | |
void | join () |
Join the thread. More... | |
void | detach () |
Detach the thread. More... | |
void | kill (int sig) |
Send signal to a thread. More... | |
bool | operator== (const Thread &thread) |
Check if two threads are the same. More... | |
void | wakeup () |
Wake up thread. More... | |
void | wakeup (Barrier *barrier) |
Wake up thread and wait for barrier afterwards. More... | |
void | wait_loop_done () |
Wait for the current loop iteration to finish. More... | |
OpMode | opmode () const |
Get operation mode. More... | |
pthread_t | thread_id () const |
Get ID of thread. More... | |
bool | started () const |
Check if thread has been started. More... | |
bool | cancelled () const |
Check if thread has been cancelled. More... | |
bool | detached () const |
Check if thread has been detached. More... | |
bool | running () const |
Check if the thread is running. More... | |
bool | waiting () const |
Check if thread is currently waiting for wakeup. More... | |
const char * | name () const |
Get name of thread. More... | |
void | set_flags (uint32_t flags) |
Set all flags in one go. More... | |
void | set_flag (uint32_t flag) |
Set flag for the thread. More... | |
void | unset_flag (uint32_t flag) |
Unset flag. More... | |
bool | flagged_bad () const |
Check if FLAG_BAD was set. More... | |
void | set_delete_on_exit (bool del) |
Set whether the thread should be deleted on exit. More... | |
void | set_prepfin_hold (bool hold) |
Hold prepare_finalize(). More... | |
void | add_notification_listener (ThreadNotificationListener *notification_listener) |
Add notification listener. More... | |
void | remove_notification_listener (ThreadNotificationListener *notification_listener) |
Remove notification listener. More... | |
void | notify_of_failed_init () |
Notify of failed init. More... | |
![]() | |
virtual | ~MainLoopEmployer () |
Virtual empty destructor. More... | |
Protected Member Functions | |
virtual void | run () |
Stub to see name in backtrace for easier debugging. More... | |
![]() | |
Thread (const char *name) | |
Constructor. More... | |
Thread (const char *name, OpMode op_mode) | |
Constructor. More... | |
void | exit () |
Exit the thread. More... | |
void | test_cancel () |
Set cancellation point. More... | |
void | yield () |
Yield the processor to another thread or process. More... | |
void | set_opmode (OpMode op_mode) |
Set operation mode. More... | |
void | set_prepfin_conc_loop (bool concurrent=true) |
Set concurrent execution of prepare_finalize() and loop(). More... | |
void | set_coalesce_wakeups (bool coalesce=true) |
Set wakeup coalescing. More... | |
void | set_name (const char *format,...) |
Set name of thread. More... | |
bool | wakeup_pending () |
Check if wakeups are pending. More... | |
Additional Inherited Members | |
![]() | |
enum | OpMode { OPMODE_CONTINUOUS, OPMODE_WAITFORWAKEUP } |
Thread operation mode. More... | |
enum | CancelState { CANCEL_ENABLED, CANCEL_DISABLED } |
Cancel state. More... | |
![]() | |
static Thread * | current_thread () |
Get the Thread instance of the currently running thread. More... | |
static Thread * | current_thread_noexc () throw () |
Similar to current_thread, but does never throw an exception. More... | |
static pthread_t | current_thread_id () |
Get the ID of the currently running thread. More... | |
static void | init_main () |
Initialize Thread wrapper instance for main thread. More... | |
static void | destroy_main () |
Destroy main thread wrapper instance. More... | |
static void | set_cancel_state (CancelState new_state, CancelState *old_state=0) |
Set the cancel state of the current thread. More... | |
![]() | |
static const unsigned int | FLAG_BAD = 0x00000001 |
Standard thread flag: "thread is bad". More... | |
![]() | |
bool | finalize_prepared |
True if prepare_finalize() has been called and was not stopped with a cancel_finalize(), false otherwise. More... | |
Mutex * | loop_mutex |
Mutex that is used to protect a call to loop(). More... | |
Mutex * | loopinterrupt_antistarve_mutex |
Mutex to avoid starvation when trying to lock loop_mutex. More... | |
Fawkes default main thread.
This thread initializes all important stuff like the BlackBoard, handles plugins and wakes up threads at defined hooks.
Definition at line 58 of file main_thread.h.
fawkes::FawkesMainThread::FawkesMainThread | ( | Configuration * | config, |
MultiLogger * | multi_logger, | ||
ThreadManager * | thread_manager, | ||
PluginManager * | plugin_manager, | ||
const char * | load_plugins, | ||
const char * | default_plugin = 0 |
||
) |
Constructor.
config | configuration to use |
multi_logger | basic multi logger to use, a network logger will be added in the ctor. |
thread_manager | thread manager used to wakeup threads |
plugin_manager | plugin manager to load the desired plugins |
load_plugins | string with comma-separated list of names of plugins to load on startup. |
default_plugin | additional default plugin name |
Definition at line 73 of file main_thread.cpp.
References fawkes::Configuration::get_bool(), fawkes::Configuration::get_uint(), fawkes::Clock::instance(), fawkes::MultiLogger::log_debug(), fawkes::MultiLogger::log_info(), and fawkes::Thread::name().
|
virtual |
Destructor.
Definition at line 142 of file main_thread.cpp.
References fawkes::Exception::get_errno(), fawkes::MultiLogger::log_warn(), and fawkes::Configuration::try_dump().
void fawkes::FawkesMainThread::full_start | ( | ) |
Start the thread and wait until once() completes.
This is useful to assure that all plugins are loaded before assuming that startup is complete.
Definition at line 197 of file main_thread.cpp.
References fawkes::Thread::start(), and fawkes::Barrier::wait().
Referenced by NaoFawkesModule::NaoFawkesModule().
MultiLogger * fawkes::FawkesMainThread::logger | ( | ) | const |
|
virtual |
Code to execute in the thread.
Implement this method to hold the code you want to be executed continously. If you do not implement this method, the default is that the thread will exit. This is useful if you choose to only implement once().
Reimplemented from fawkes::Thread.
Definition at line 272 of file main_thread.cpp.
References fawkes::Thread::CANCEL_DISABLED, fawkes::Mutex::lock(), fawkes::PluginManager::lock(), fawkes::MultiLogger::log_debug(), fawkes::MultiLogger::log_warn(), fawkes::TimeWait::mark_start(), fawkes::Thread::set_cancel_state(), fawkes::Time::stamp_systime(), fawkes::Thread::test_cancel(), fawkes::ThreadManager::timed_threads_exist(), fawkes::ThreadManager::try_recover(), fawkes::Mutex::unlock(), fawkes::PluginManager::unlock(), fawkes::InterruptibleBarrier::wait(), fawkes::ThreadManager::wait_for_timed_threads(), fawkes::TimeWait::wait_systime(), fawkes::Thread::wakeup(), fawkes::BlockedTimingAspect::WAKEUP_HOOK_ACT, fawkes::BlockedTimingAspect::WAKEUP_HOOK_ACT_EXEC, fawkes::BlockedTimingAspect::WAKEUP_HOOK_POST_LOOP, fawkes::BlockedTimingAspect::WAKEUP_HOOK_PRE_LOOP, fawkes::BlockedTimingAspect::WAKEUP_HOOK_SENSOR_ACQUIRE, fawkes::BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PREPARE, fawkes::BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS, fawkes::BlockedTimingAspect::WAKEUP_HOOK_SKILL, fawkes::BlockedTimingAspect::WAKEUP_HOOK_THINK, fawkes::BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE, and fawkes::Thread::yield().
|
virtual |
Execute an action exactly once.
This code is executed once and only once right after the thread is started before loop() is called. This is useful if you want to implement an one-shot background job. Just implement once() and leave loop() untouched. Start the thread and detach it and it will just do its job and then die automatically. If you use set_delete_on_exit(true) even the Thread instance will be automatically deleted.
Reimplemented from fawkes::Thread.
Definition at line 209 of file main_thread.cpp.
References fawkes::PluginManager::load(), fawkes::MultiLogger::log_error(), fawkes::PluginLoadException::plugin_name(), and fawkes::Barrier::wait().
|
inlineprotectedvirtual |
Stub to see name in backtrace for easier debugging.
Reimplemented from fawkes::Thread.
Definition at line 96 of file main_thread.h.
References fawkes::Thread::run().
|
virtual |
Set a new main loop.
Set the main loop. An exception should be thrown if anything prevents this from happening successful.
mainloop_thread | new main loop thread. The caller of this method must ensure that the thread operates in wait-for-wakeup mode and executes the main loop as its loop() method (i.e. the thread must have a properly initialized MainLoopAspect). |
Implements fawkes::MainLoopEmployer.
Definition at line 260 of file main_thread.cpp.
References fawkes::InterruptibleBarrier::interrupt(), fawkes::Mutex::lock(), fawkes::Thread::loopinterrupt_antistarve_mutex, and fawkes::Mutex::unlock().