ROS 2 rclcpp + rcl - jazzy
jazzy
ROS 2 C++ Client Library with ROS Client Library
|
Public Member Functions | |
RCLCPP_PUBLIC | MultiThreadedExecutor (const rclcpp::ExecutorOptions &options=rclcpp::ExecutorOptions(), size_t number_of_threads=0, bool yield_before_execute=false, std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
Constructor for MultiThreadedExecutor. More... | |
RCLCPP_PUBLIC void | spin () override |
RCLCPP_PUBLIC size_t | get_number_of_threads () |
![]() | |
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... | |
Protected Member Functions | |
RCLCPP_PUBLIC void | run (size_t this_thread_number) |
![]() | |
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... | |
void | trigger_entity_recollect (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. | |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
std::atomic_bool | spinning |
Spinning state, used to prevent multi threaded calls to spin and to cancel blocking spins. | |
std::shared_ptr< rclcpp::GuardCondition > | interrupt_guard_condition_ |
Guard condition for signaling the rmw layer to wake up for special events. | |
std::shared_ptr< rclcpp::GuardCondition > | shutdown_guard_condition_ |
Guard condition for signaling the rmw layer to wake up for system shutdown. | |
std::mutex | mutex_ |
std::shared_ptr< rclcpp::Context > | context_ |
The context associated with this executor. | |
std::shared_ptr< rclcpp::executors::ExecutorNotifyWaitable > | notify_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< ExecutorImplementation > | impl_ |
Pointer to implementation. | |
Definition at line 35 of file multi_threaded_executor.hpp.
|
explicit |
Constructor for MultiThreadedExecutor.
For the yield_before_execute option, when true std::this_thread::yield() will be called after acquiring work (as an AnyExecutable) and releasing the spinning lock, but before executing the work. This is useful for reproducing some bugs related to taking work more than once.
options | common options for all executors |
number_of_threads | number of threads to have in the thread pool, the default 0 will use the number of cpu cores found (minimum of 2) |
yield_before_execute | if true std::this_thread::yield() is called |
timeout | maximum time to wait |
Definition at line 29 of file multi_threaded_executor.cpp.
References rclcpp::get_logger().
|
overridevirtual |
std::runtime_error | when spin() called while already spinning |
Implements rclcpp::Executor.
Definition at line 53 of file multi_threaded_executor.cpp.
References rclcpp::Executor::spinning.