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 () |
Public Member Functions inherited from rclcpp::Executor | |
Executor (const rclcpp::ExecutorOptions &options=rclcpp::ExecutorOptions()) | |
Default constructor. More... | |
virtual | ~Executor () |
Default destructor. 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)) |
Complete all available queued work without blocking. More... | |
virtual void | spin_once (std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
template<typename ResponseT , typename TimeRepT = int64_t, typename TimeT = std::milli> | |
FutureReturnCode | spin_until_future_complete (const std::shared_future< ResponseT > &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) |
Protected Member Functions inherited from rclcpp::Executor | |
void | spin_node_once_nanoseconds (rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node, std::chrono::nanoseconds timeout) |
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 (rclcpp::CallbackGroup::SharedPtr group) |
rclcpp::CallbackGroup::SharedPtr | get_group_by_timer (rclcpp::TimerBase::SharedPtr timer) |
bool | get_next_ready_executable (AnyExecutable &any_executable) |
bool | get_next_executable (AnyExecutable &any_executable, std::chrono::nanoseconds timeout=std::chrono::nanoseconds(-1)) |
Additional Inherited Members | |
Static Protected Member Functions inherited from rclcpp::Executor | |
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) |
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. 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... | |
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 | memory_strategy_mutex_ |
memory_strategy::MemoryStrategy::SharedPtr | memory_strategy_ |
The memory strategy: an interface for handling user-defined memory allocation strategies. More... | |
std::shared_ptr< rclcpp::Context > | context_ |
The context associated with this executor. More... | |
std::list< rclcpp::node_interfaces::NodeBaseInterface::WeakPtr > | weak_nodes_ |
std::list< const rcl_guard_condition_t * > | guard_conditions_ |
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 |