Skip to content

Class ILLIXR::threadloop

ClassList > ILLIXR > threadloop

A reusable threadloop for plugins. More...

  • #include <threadloop.hpp>

Inherits the following classes: ILLIXR::plugin

Inherited by the following classes: ILLIXR::data_injection, ILLIXR::debugview, ILLIXR::gldemo, ILLIXR::lighthouse, ILLIXR::native_renderer, ILLIXR::offline_cam, ILLIXR::offline_imu, ILLIXR::offload_reader, ILLIXR::offload_rendering_client, ILLIXR::offload_rendering_server, ILLIXR::offload_writer, ILLIXR::openni_plugin, ILLIXR::openwarp_vk_plugin, ILLIXR::server_reader, ILLIXR::timewarp_gl, ILLIXR::timewarp_vk_plugin, ILLIXR::webcam, ILLIXR::zed_camera_thread, ILLIXR::zed_imu_thread

Public Functions

Type Name
virtual void internal_stop ()
Stops the thread.
virtual void start () override
Starts the thread.
virtual void stop () override
Joins the thread.
threadloop (const std::string & name, phonebook * pb)
~threadloop () override

Public Functions inherited from ILLIXR::plugin

See ILLIXR::plugin

Type Name
std::string get_name () noexcept const
plugin (std::string name, phonebook * pb)
void spd_add_file_sink (const std::string & file_name, const std::string & extension, const std::string & log_level)
auto spdlogger (const char * log_level)
virtual void start ()
A method which Spindle calls when it starts the component.
virtual void stop ()
A method which Spindle calls when it stops the component.
virtual ~plugin () = default

Protected Types

Type Name
enum skip_option

Protected Attributes

Type Name
std::size_t iteration_no = 0
std::size_t skip_no = 0

Protected Attributes inherited from ILLIXR::plugin

See ILLIXR::plugin

Type Name
const std::shared_ptr< gen_guid > gen_guid_
const std::size_t id_
std::string name_
const phonebook * phonebook_
std::shared_ptr< spdlog::logger > plugin_logger_
const std::shared_ptr< record_logger > record_logger_

Protected Functions

Type Name
virtual void _p_one_iteration () = 0
Override with the computation the thread does every loop.
virtual skip_option _p_should_skip ()
Gets called in a tight loop, to gate the invocation of _p_one_iteration() __
virtual void _p_thread_setup ()
Gets called at setup time, from the new thread.
bool should_terminate ()
Whether the thread has been asked to terminate.

Detailed Description

The thread continuously runs _p_one_iteration() and is stoppable by stop().

This factors out the common code I noticed in many different plugins.

Public Functions Documentation

function internal_stop

Stops the thread.

inline virtual void ILLIXR::threadloop::internal_stop () 

A thread should call this if it wants to stop itself (due to out of data for example).


function start

Starts the thread.

inline virtual void ILLIXR::threadloop::start () override

This cannot go into the constructor because it starts a thread which calls _p_one_iteration() which is virtual in the child class.

Calling a virtual child method from the parent constructor will not work as expected 1. Instead, the ISO CPP FAQ recommends calling a start() method immediately after construction 2.

Implements ILLIXR::plugin::start


function stop

Joins the thread.

inline virtual void ILLIXR::threadloop::stop () override

Must have already stopped the stoplight.

Implements ILLIXR::plugin::stop


function threadloop

inline ILLIXR::threadloop::threadloop (
    const std::string & name,
    phonebook * pb
) 

function ~threadloop

inline ILLIXR::threadloop::~threadloop () override

Protected Types Documentation

enum skip_option

enum ILLIXR::threadloop::skip_option {
    run,
    skip_and_spin,
    skip_and_yield,
    stop
};

Protected Attributes Documentation

variable iteration_no

std::size_t ILLIXR::threadloop::iteration_no;

variable skip_no

std::size_t ILLIXR::threadloop::skip_no;

Protected Functions Documentation

function _p_one_iteration

Override with the computation the thread does every loop.

virtual void ILLIXR::threadloop::_p_one_iteration () = 0

This gets called in rapid succession.


function _p_should_skip

Gets called in a tight loop, to gate the invocation of _p_one_iteration() __

inline virtual skip_option ILLIXR::threadloop::_p_should_skip () 


function _p_thread_setup

Gets called at setup time, from the new thread.

inline virtual void ILLIXR::threadloop::_p_thread_setup () 


function should_terminate

Whether the thread has been asked to terminate.

inline bool ILLIXR::threadloop::should_terminate () 

Check this before doing long-running computation; it makes termination more responsive.



The documentation for this class was generated from the following file /home/friedel/devel/ILLIXR/include/illixr/threadloop.hpp