rclcpp
master
C++ ROS Client Library API
|
#include <multi_threaded_executor.hpp>
Public Member Functions | |
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... | |
virtual | ~MultiThreadedExecutor () |
void | spin () override |
size_t | get_number_of_threads () |
![]() | |
Executor (const rclcpp::ExecutorOptions &options=rclcpp::ExecutorOptions()) | |
Default constructor. More... | |
virtual | ~Executor () |
Default destructor. More... | |
virtual 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 std::vector< rclcpp::CallbackGroup::WeakPtr > | get_all_callback_groups () |
Get callback groups that belong to executor. More... | |
virtual std::vector< rclcpp::CallbackGroup::WeakPtr > | get_manually_added_callback_groups () |
Get callback groups that belong to executor. More... | |
virtual std::vector< rclcpp::CallbackGroup::WeakPtr > | get_automatically_added_callback_groups_from_nodes () |
Get callback groups that belong to executor. More... | |
virtual void | remove_callback_group (rclcpp::CallbackGroup::SharedPtr group_ptr, bool notify=true) |
Remove a callback group from the executor. More... | |
virtual void | add_node (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, bool notify=true) |
Add a node to the executor. More... | |
virtual void | add_node (std::shared_ptr< rclcpp::Node > node_ptr, bool notify=true) |
Convenience function which takes Node and forwards NodeBaseInterface. More... | |
virtual void | remove_node (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, bool notify=true) |
Remove a node from the executor. More... | |
virtual 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. More... | |
void | spin_node_some (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node) |
Add a node, complete all immediately available work, and remove the node. More... | |
void | spin_node_some (std::shared_ptr< rclcpp::Node > node) |
Convenience function which takes Node and forwards NodeBaseInterface. More... | |
virtual void | spin_some (std::chrono::nanoseconds max_duration=std::chrono::nanoseconds(0)) |
Collect work once and execute all available work, optionally within a duration. More... | |
virtual 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 void | spin_once (std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
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... | |
void | cancel () |
Cancel any running spin* function, causing it to return. More... | |
void | set_memory_strategy (memory_strategy::MemoryStrategy::SharedPtr memory_strategy) |
Support dynamic switching of the memory strategy. More... | |
Protected Member Functions | |
void | run (size_t this_thread_number) |
![]() | |
void | spin_node_once_nanoseconds (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node, std::chrono::nanoseconds timeout) |
void | spin_some_impl (std::chrono::nanoseconds max_duration, bool exhaustive) |
void | execute_any_executable (AnyExecutable &any_exec) |
Find the next available executable and do the work associated with it. More... | |
void | wait_for_work (std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr | get_node_by_group (const WeakCallbackGroupsToNodesMap &weak_groups_to_nodes, rclcpp::CallbackGroup::SharedPtr group) |
bool | has_node (const rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, const WeakCallbackGroupsToNodesMap &weak_groups_to_nodes) const |
Return true if the node has been added to this executor. More... | |
rclcpp::CallbackGroup::SharedPtr | get_group_by_timer (rclcpp::TimerBase::SharedPtr timer) |
virtual void | add_callback_group_to_map (rclcpp::CallbackGroup::SharedPtr group_ptr, rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr, WeakCallbackGroupsToNodesMap &weak_groups_to_nodes, bool notify=true) RCPPUTILS_TSA_REQUIRES(mutex_) |
Add a callback group to an executor. More... | |
virtual void | remove_callback_group_from_map (rclcpp::CallbackGroup::SharedPtr group_ptr, WeakCallbackGroupsToNodesMap &weak_groups_to_nodes, bool notify=true) RCPPUTILS_TSA_REQUIRES(mutex_) |
Remove a callback group from the executor. More... | |
bool | get_next_ready_executable (AnyExecutable &any_executable) |
bool | get_next_ready_executable_from_map (AnyExecutable &any_executable, const WeakCallbackGroupsToNodesMap &weak_groups_to_nodes) |
bool | get_next_executable (AnyExecutable &any_executable, std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
virtual void | add_callback_groups_from_nodes_associated_to_executor () RCPPUTILS_TSA_REQUIRES(mutex_) |
Add all callback groups that can be automatically added from associated nodes. More... | |
memory_strategy::MemoryStrategy::SharedPtr memory_strategy_ | RCPPUTILS_TSA_PT_GUARDED_BY (mutex_) |
The memory strategy: an interface for handling user-defined memory allocation strategies. More... | |
virtual void | spin_once_impl (std::chrono::nanoseconds timeout) |
WeakNodesToGuardConditionsMap weak_nodes_to_guard_conditions_ | RCPPUTILS_TSA_GUARDED_BY (mutex_) |
maps nodes to guard conditions More... | |
WeakCallbackGroupsToNodesMap weak_groups_associated_with_executor_to_nodes_ | RCPPUTILS_TSA_GUARDED_BY (mutex_) |
maps callback groups associated to nodes More... | |
WeakCallbackGroupsToNodesMap weak_groups_to_nodes_associated_with_executor_ | RCPPUTILS_TSA_GUARDED_BY (mutex_) |
maps callback groups to nodes associated with executor More... | |
WeakCallbackGroupsToNodesMap weak_groups_to_nodes_ | RCPPUTILS_TSA_GUARDED_BY (mutex_) |
maps all callback groups to nodes More... | |
std::list< rclcpp::node_interfaces::NodeBaseInterface::WeakPtr > weak_nodes_ | RCPPUTILS_TSA_GUARDED_BY (mutex_) |
nodes that are associated with the executor More... | |
Additional Inherited Members | |
![]() | |
typedef std::map< rclcpp::node_interfaces::NodeBaseInterface::WeakPtr, const rcl_guard_condition_t *, std::owner_less< rclcpp::node_interfaces::NodeBaseInterface::WeakPtr > > | WeakNodesToGuardConditionsMap |
![]() | |
static void | execute_subscription (rclcpp::SubscriptionBase::SharedPtr subscription) |
static void | execute_timer (rclcpp::TimerBase::SharedPtr timer) |
static void | execute_service (rclcpp::ServiceBase::SharedPtr service) |
static void | execute_client (rclcpp::ClientBase::SharedPtr client) |
![]() | |
std::atomic_bool | spinning |
Spinning state, used to prevent multi threaded calls to spin and to cancel blocking spins. More... | |
rcl_guard_condition_t | interrupt_guard_condition_ = rcl_get_zero_initialized_guard_condition() |
Guard condition for signaling the rmw layer to wake up for special events. More... | |
std::shared_ptr< rclcpp::GuardCondition > | shutdown_guard_condition_ |
rcl_wait_set_t | wait_set_ = rcl_get_zero_initialized_wait_set() |
Wait set for managing entities that the rmw layer waits on. More... | |
std::mutex | mutex_ |
std::shared_ptr< rclcpp::Context > | context_ |
The context associated with this executor. More... | |
rclcpp::OnShutdownCallbackHandle | shutdown_callback_handle_ |
shutdown callback handle registered to Context More... | |
rclcpp::executors::MultiThreadedExecutor::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.
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 instead |
yield_before_execute | if true std::this_thread::yield() is called |
timeout | maximum time to wait |
|
virtual |
|
overridevirtual |
std::runtime_error | when spin() called while already spinning |
Implements rclcpp::Executor.
size_t rclcpp::executors::MultiThreadedExecutor::get_number_of_threads | ( | ) |
|
protected |