ROS 2 rclcpp + rcl - rolling  rolling-a919a6e5
ROS 2 C++ Client Library with ROS Client Library
Public Member Functions | List of all members
rclcpp::executors::SingleThreadedExecutor Class Reference

Single-threaded executor implementation. More...

#include <rclcpp/executors/single_threaded_executor.hpp>

Inheritance diagram for rclcpp::executors::SingleThreadedExecutor:
Inheritance graph
[legend]
Collaboration diagram for rclcpp::executors::SingleThreadedExecutor:
Collaboration graph
[legend]

Public Member Functions

RCLCPP_PUBLIC SingleThreadedExecutor (const rclcpp::ExecutorOptions &options=rclcpp::ExecutorOptions())
 Default constructor. See the default constructor for Executor.
 
virtual RCLCPP_PUBLIC ~SingleThreadedExecutor ()
 Default destructor.
 
RCLCPP_PUBLIC void spin () override
 Single-threaded implementation of spin. More...
 
- Public Member Functions inherited from rclcpp::Executor
RCLCPP_PUBLIC Executor (const rclcpp::ExecutorOptions &options=rclcpp::ExecutorOptions())
 Default constructor. More...
 
virtual RCLCPP_PUBLIC ~Executor ()
 Default destructor.
 
virtual RCLCPP_PUBLIC void add_callback_group (rclcpp::CallbackGroup::SharedPtr group_ptr, rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, bool notify=true)
 Add a callback group to an executor. More...
 
virtual RCLCPP_PUBLIC std::vector< rclcpp::CallbackGroup::WeakPtr > get_all_callback_groups ()
 Get callback groups that belong to executor. More...
 
virtual RCLCPP_PUBLIC std::vector< rclcpp::CallbackGroup::WeakPtr > get_manually_added_callback_groups ()
 Get callback groups that belong to executor. More...
 
virtual RCLCPP_PUBLIC std::vector< rclcpp::CallbackGroup::WeakPtr > get_automatically_added_callback_groups_from_nodes ()
 Get callback groups that belong to executor. More...
 
virtual RCLCPP_PUBLIC void remove_callback_group (rclcpp::CallbackGroup::SharedPtr group_ptr, bool notify=true)
 Remove a callback group from the executor. More...
 
virtual RCLCPP_PUBLIC void add_node (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, bool notify=true)
 Add a node to the executor. More...
 
virtual RCLCPP_PUBLIC void add_node (std::shared_ptr< rclcpp::Node > node_ptr, bool notify=true)
 Convenience function which takes Node and forwards NodeBaseInterface. More...
 
virtual RCLCPP_PUBLIC void remove_node (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, bool notify=true)
 Remove a node from the executor. More...
 
virtual RCLCPP_PUBLIC void remove_node (std::shared_ptr< rclcpp::Node > node_ptr, bool notify=true)
 Convenience function which takes Node and forwards NodeBaseInterface. More...
 
template<typename RepT = int64_t, typename T = std::milli>
void spin_node_once (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node, std::chrono::duration< RepT, T > timeout=std::chrono::duration< RepT, T >(-1))
 Add a node to executor, execute the next available unit of work, and remove the node. More...
 
template<typename NodeT = rclcpp::Node, typename RepT = int64_t, typename T = std::milli>
void spin_node_once (std::shared_ptr< NodeT > node, std::chrono::duration< RepT, T > timeout=std::chrono::duration< RepT, T >(-1))
 Convenience function which takes Node and forwards NodeBaseInterface.
 
virtual RCLCPP_PUBLIC void spin_node_some (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node)
 Add a node, complete all immediately available work, and remove the node. More...
 
virtual RCLCPP_PUBLIC void spin_node_some (std::shared_ptr< rclcpp::Node > node)
 Convenience function which takes Node and forwards NodeBaseInterface.
 
virtual RCLCPP_PUBLIC void spin_some (std::chrono::nanoseconds max_duration=std::chrono::nanoseconds(0))
 Collect work once and execute all available work, optionally within a max duration. More...
 
virtual RCLCPP_PUBLIC void spin_node_all (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node, std::chrono::nanoseconds max_duration)
 Add a node, complete all immediately available work exhaustively, and remove the node. More...
 
virtual RCLCPP_PUBLIC void spin_node_all (std::shared_ptr< rclcpp::Node > node, std::chrono::nanoseconds max_duration)
 Convenience function which takes Node and forwards NodeBaseInterface.
 
virtual RCLCPP_PUBLIC void spin_all (std::chrono::nanoseconds max_duration)
 Collect and execute work repeatedly within a duration or until no more work is available. More...
 
virtual RCLCPP_PUBLIC void spin_once (std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1))
 Collect work once and execute the next available work, optionally within a duration. More...
 
template<typename FutureT , typename TimeRepT = int64_t, typename TimeT = std::milli>
FutureReturnCode spin_until_future_complete (const FutureT &future, std::chrono::duration< TimeRepT, TimeT > timeout=std::chrono::duration< TimeRepT, TimeT >(-1))
 Spin (blocking) until the future is complete, it times out waiting, or rclcpp is interrupted. More...
 
virtual RCLCPP_PUBLIC void cancel ()
 Cancel any running spin* function, causing it to return. More...
 
RCLCPP_PUBLIC bool is_spinning ()
 Returns true if the executor is currently spinning. More...
 

Additional Inherited Members

- Protected Member Functions inherited from rclcpp::Executor
 Executor (const std::shared_ptr< rclcpp::Context > &context)
 Constructor that will not initialize any non-trivial members. More...
 
RCLCPP_PUBLIC void spin_node_once_nanoseconds (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node, std::chrono::nanoseconds timeout)
 Add a node to executor, execute the next available unit of work, and remove the node. More...
 
virtual RCLCPP_PUBLIC FutureReturnCode spin_until_future_complete_impl (std::chrono::nanoseconds timeout, const std::function< std::future_status(std::chrono::nanoseconds wait_time)> &wait_for_future)
 Spin (blocking) until the future is complete, it times out waiting, or rclcpp is interrupted. More...
 
RCLCPP_PUBLIC void spin_some_impl (std::chrono::nanoseconds max_duration, bool exhaustive)
 Collect work and execute available work, optionally within a duration. More...
 
RCLCPP_PUBLIC void execute_any_executable (AnyExecutable &any_exec)
 Find the next available executable and do the work associated with it. More...
 
RCLCPP_PUBLIC void collect_entities ()
 Gather all of the waitable entities from associated nodes and callback groups.
 
RCLCPP_PUBLIC void wait_for_work (std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1))
 Block until more work becomes avilable or timeout is reached. More...
 
RCLCPP_PUBLIC bool get_next_ready_executable (AnyExecutable &any_executable)
 Check for executable in ready state and populate union structure. More...
 
RCLCPP_PUBLIC bool get_next_executable (AnyExecutable &any_executable, std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1))
 Wait for executable in ready state and populate union structure. More...
 
virtual RCLCPP_PUBLIC void handle_updated_entities (bool notify)
 This function triggers a recollect of all entities that are registered to the executor. More...
 
virtual RCLCPP_PUBLIC void spin_once_impl (std::chrono::nanoseconds timeout)
 
rclcpp::WaitSet wait_set_ RCPPUTILS_TSA_GUARDED_BY (mutex_)
 WaitSet to be waited on.
 
std::optional< rclcpp::WaitResult< rclcpp::WaitSet > > wait_result_ RCPPUTILS_TSA_GUARDED_BY (mutex_)
 
rclcpp::executors::ExecutorEntitiesCollection current_collection_ RCPPUTILS_TSA_GUARDED_BY (mutex_)
 Hold the current state of the collection being waited on by the waitset.
 
std::shared_ptr< rclcpp::executors::ExecutorNotifyWaitable > current_notify_waitable_ RCPPUTILS_TSA_GUARDED_BY (mutex_)
 Hold the current state of the notify waitable being waited on by the waitset.
 
- Static Protected Member Functions inherited from rclcpp::Executor
static RCLCPP_PUBLIC void execute_subscription (rclcpp::SubscriptionBase::SharedPtr subscription)
 Run subscription executable. More...
 
static RCLCPP_PUBLIC void execute_timer (rclcpp::TimerBase::SharedPtr timer, const std::shared_ptr< void > &data_ptr)
 Run timer executable. More...
 
static RCLCPP_PUBLIC void execute_service (rclcpp::ServiceBase::SharedPtr service)
 Run service server executable. More...
 
static RCLCPP_PUBLIC void execute_client (rclcpp::ClientBase::SharedPtr client)
 Run service client executable. More...
 
- Protected Attributes inherited from rclcpp::Executor
std::atomic_bool spinning
 Spinning state, used to prevent multi threaded calls to spin and to cancel blocking spins.
 
std::shared_ptr< rclcpp::GuardConditioninterrupt_guard_condition_
 Guard condition for signaling the rmw layer to wake up for special events.
 
std::shared_ptr< rclcpp::GuardConditionshutdown_guard_condition_
 Guard condition for signaling the rmw layer to wake up for system shutdown.
 
std::mutex mutex_
 
std::shared_ptr< rclcpp::Contextcontext_
 The context associated with this executor.
 
std::shared_ptr< rclcpp::executors::ExecutorNotifyWaitablenotify_waitable_
 Waitable containing guard conditions controlling the executor flow. More...
 
std::atomic_bool entities_need_rebuild_
 
rclcpp::executors::ExecutorEntitiesCollector collector_
 Collector used to associate executable entities from nodes and guard conditions.
 
rclcpp::OnShutdownCallbackHandle shutdown_callback_handle_
 shutdown callback handle registered to Context
 
std::unique_ptr< ExecutorImplementationimpl_
 Pointer to implementation.
 

Detailed Description

Single-threaded executor implementation.

This is the default executor created by rclcpp::spin.

Definition at line 42 of file single_threaded_executor.hpp.

Member Function Documentation

◆ spin()

void SingleThreadedExecutor::spin ( )
overridevirtual

Single-threaded implementation of spin.

This function will block until work comes in, execute it, and then repeat the process until canceled. It may be interrupt by a call to rclcpp::Executor::cancel() or by ctrl-c if the associated context is configured to shutdown on SIGINT.

Exceptions
std::runtime_errorwhen spin() called while already spinning

Implements rclcpp::Executor.

Definition at line 28 of file single_threaded_executor.cpp.

References rclcpp::Executor::context_, rclcpp::Executor::execute_any_executable(), rclcpp::Executor::get_next_executable(), rclcpp::ok(), and rclcpp::Executor::spinning.

Referenced by rclcpp::spin().

Here is the call graph for this function:
Here is the caller graph for this function:

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