Goby3  3.1.4
2024.02.22
goby::middleware::SimpleThread< Config > Class Template Reference

Implements Thread for a three layer middleware setup ([ intervehicle [ interprocess [ interthread ] ] ]) based around InterVehicleForwarder. More...

#include <goby/middleware/application/simple_thread.h>

Inheritance diagram for goby::middleware::SimpleThread< Config >:
goby::middleware::Thread< Config, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > > goby::middleware::coroner::Thread< SimpleThread< Config > >

Public Member Functions

 SimpleThread (const Config &cfg, double loop_freq_hertz=0, int index=-1)
 Construct a thread with a given configuration, optionally a loop frequency and/or index. More...
 
 SimpleThread (const Config &cfg, boost::units::quantity< boost::units::si::frequency > loop_freq, int index=-1)
 Construct a thread with a given configuration, a loop frequency (using boost::units) and optionally an index. More...
 
InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > & intervehicle ()
 Access the transporter on the intervehicle layer (which wraps interprocess and interthread) More...
 
InterProcessForwarder< InterThreadTransporter > & interprocess ()
 Access the transporter on the interprocess layer (which wraps interthread) More...
 
InterThreadTransporterinterthread ()
 Access the transporter on the interthread layer (this is the innermost transporter) More...
 
- Public Member Functions inherited from goby::middleware::Thread< Config, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > >
 Thread (const Config &cfg, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > *transporter, int index)
 Construct a thread with a given configuration, underlying transporter, and index (for multiple instantiations), but without any loop() frequency. More...
 
 Thread (const Config &cfg, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > *transporter, double loop_freq_hertz=0, int index=-1)
 Construct a thread with all possible metadata (using double to specify frequency in Hertz) More...
 
 Thread (const Config &cfg, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > *transporter, boost::units::quantity< boost::units::si::frequency > loop_freq, int index=-1)
 Construct a thread with all possible metadata (using boost::units to specify frequency) More...
 
virtual ~Thread ()
 
void run (std::atomic< bool > &alive)
 Run the thread until the boolean reference passed is set false. This call blocks, and should be run in a std::thread by the caller. More...
 
int index () const
 
std::type_index type_index ()
 
void set_type_index (std::type_index type_i)
 
std::string name ()
 
void set_name (const std::string &name)
 
int uid ()
 
void set_uid (int uid)
 

Friends

class coroner::Thread< SimpleThread< Config > >
 

Additional Inherited Members

- Public Types inherited from goby::middleware::Thread< Config, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > >
using Transporter = InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > >
 
- Static Public Attributes inherited from goby::middleware::Thread< Config, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > >
static constexpr goby::middleware::Group shutdown_group_
 
static constexpr goby::middleware::Group joinable_group_
 
- Protected Member Functions inherited from goby::middleware::Thread< Config, InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > >
 Thread (const Config &cfg, boost::units::quantity< boost::units::si::frequency > loop_freq, int index=-1)
 
void set_transporter (InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > *transporter)
 
virtual void loop ()
 
double loop_frequency_hertz () const
 
decltype(loop_frequency_) loop_frequency () const
 
double loop_max_frequency () const
 
void run_once ()
 
InterVehicleForwarder< InterProcessForwarder< InterThreadTransporter > > & transporter () const
 
const Config & cfg () const
 
virtual void initialize ()
 
virtual void finalize ()
 
void thread_health (goby::middleware::protobuf::ThreadHealth &health)
 
virtual void health (goby::middleware::protobuf::ThreadHealth &health)
 Called when HealthRequest is made by goby_coroner. More...
 
void thread_quit ()
 
bool alive ()
 
- Protected Member Functions inherited from goby::middleware::coroner::Thread< SimpleThread< Config > >
void subscribe_coroner ()
 

Detailed Description

template<typename Config>
class goby::middleware::SimpleThread< Config >

Implements Thread for a three layer middleware setup ([ intervehicle [ interprocess [ interthread ] ] ]) based around InterVehicleForwarder.

Template Parameters
ConfigConfiguration type Derive from this class to create standalone threads that can be launched and joined by MultiThreadApplication's launch_thread and join_thread methods.

Definition at line 43 of file simple_thread.h.

Constructor & Destructor Documentation

◆ SimpleThread() [1/2]

template<typename Config >
goby::middleware::SimpleThread< Config >::SimpleThread ( const Config &  cfg,
double  loop_freq_hertz = 0,
int  index = -1 
)
inline

Construct a thread with a given configuration, optionally a loop frequency and/or index.

Parameters
cfgData to configure the code running in this thread
loop_freq_hertzThe frequency at which to attempt to call loop(), assuming the thread isn't blocked handling transporter callbacks (e.g. subscribe callbacks). Zero or negative indicates loop() will never be called.
indexNumeric index to identify this instantiation of the SimpleThread (only necessary if multiple Threads of the same type are created)

Definition at line 58 of file simple_thread.h.

◆ SimpleThread() [2/2]

template<typename Config >
goby::middleware::SimpleThread< Config >::SimpleThread ( const Config &  cfg,
boost::units::quantity< boost::units::si::frequency >  loop_freq,
int  index = -1 
)
inline

Construct a thread with a given configuration, a loop frequency (using boost::units) and optionally an index.

Parameters
cfgData to configure the code running in this thread
loop_freqThe frequency at which to attempt to call loop(), assuming the thread isn't blocked handling transporter callbacks (e.g. subscribe callbacks). Zero or negative indicates loop() will never be called.
indexNumeric index to identify this instantiation of the SimpleThread (only necessary if multiple Threads of the same type are created)

Definition at line 68 of file simple_thread.h.

Member Function Documentation

◆ interprocess()

template<typename Config >
InterProcessForwarder<InterThreadTransporter>& goby::middleware::SimpleThread< Config >::interprocess ( )
inline

Access the transporter on the interprocess layer (which wraps interthread)

Definition at line 90 of file simple_thread.h.

◆ interthread()

template<typename Config >
InterThreadTransporter& goby::middleware::SimpleThread< Config >::interthread ( )
inline

Access the transporter on the interthread layer (this is the innermost transporter)

Definition at line 96 of file simple_thread.h.

◆ intervehicle()

template<typename Config >
InterVehicleForwarder<InterProcessForwarder<InterThreadTransporter> >& goby::middleware::SimpleThread< Config >::intervehicle ( )
inline

Access the transporter on the intervehicle layer (which wraps interprocess and interthread)

Definition at line 84 of file simple_thread.h.

Friends And Related Function Documentation

◆ coroner::Thread< SimpleThread< Config > >

template<typename Config >
friend class coroner::Thread< SimpleThread< Config > >
friend

Definition at line 50 of file simple_thread.h.


The documentation for this class was generated from the following file: