ROS 2 rclcpp + rcl - kilted
kilted
ROS 2 C++ Client Library with ROS Client Library
|
A condition that can be waited on in a single wait set and asynchronously triggered. More...
#include <rclcpp/guard_condition.hpp>
Public Member Functions | |
RCLCPP_PUBLIC | GuardCondition (const rclcpp::Context::SharedPtr &context=rclcpp::contexts::get_global_default_context(), rcl_guard_condition_options_t guard_condition_options=rcl_guard_condition_get_default_options()) |
Construct the guard condition, optionally specifying which Context to use. More... | |
RCLCPP_PUBLIC rcl_guard_condition_t & | get_rcl_guard_condition () |
Return the underlying rcl guard condition structure. | |
RCLCPP_PUBLIC const rcl_guard_condition_t & | get_rcl_guard_condition () const |
Return the underlying rcl guard condition structure. | |
RCLCPP_PUBLIC void | trigger () |
Signal that the condition has been met, notifying both the wait set and listeners, if any. More... | |
RCLCPP_PUBLIC bool | exchange_in_use_by_wait_set_state (bool in_use_state) |
Exchange the "in use by wait set" state for this guard condition. More... | |
RCLCPP_PUBLIC void | add_to_wait_set (rcl_wait_set_t &wait_set) |
Adds the guard condition to a waitset. More... | |
RCLCPP_PUBLIC void | set_on_trigger_callback (std::function< void(size_t)> callback) |
Set a callback to be called whenever the guard condition is triggered. More... | |
Protected Attributes | |
rcl_guard_condition_t | rcl_guard_condition_ |
std::atomic< bool > | in_use_by_wait_set_ {false} |
std::recursive_mutex | reentrant_mutex_ |
std::function< void(size_t)> | on_trigger_callback_ {nullptr} |
size_t | unread_count_ {0} |
void * | wait_set_ {nullptr} |
A condition that can be waited on in a single wait set and asynchronously triggered.
Definition at line 31 of file guard_condition.hpp.
|
explicit |
Construct the guard condition, optionally specifying which Context to use.
[in] | context | Optional custom context to be used. Defaults to using the global default context singleton. Shared ownership of the context is held with the guard condition until destruction. |
[in] | guard_condition_options | Optional guard condition options to be used. Defaults to using the default guard condition options. |
std::invalid_argument | if the context is nullptr. |
rclcpp::exceptions::RCLError | based exceptions when underlying rcl functions fail. |
Definition at line 25 of file guard_condition.cpp.
References rcl_guard_condition_init(), and RCL_RET_OK.
void rclcpp::GuardCondition::add_to_wait_set | ( | rcl_wait_set_t & | wait_set | ) |
Adds the guard condition to a waitset.
This function is thread-safe.
[in] | wait_set | pointer to a wait set where to add the guard condition |
Definition at line 95 of file guard_condition.cpp.
References exchange_in_use_by_wait_set_state(), RCL_RET_OK, and rcl_wait_set_add_guard_condition().
bool rclcpp::GuardCondition::exchange_in_use_by_wait_set_state | ( | bool | in_use_state | ) |
Exchange the "in use by wait set" state for this guard condition.
This is used to ensure this guard condition is not used by multiple wait sets at the same time.
[in] | in_use_state | the new state to exchange into the state, true indicates it is now in use by a wait set, and false is that it is no longer in use by a wait set. |
Definition at line 89 of file guard_condition.cpp.
Referenced by add_to_wait_set().
void rclcpp::GuardCondition::set_on_trigger_callback | ( | std::function< void(size_t)> | callback | ) |
Set a callback to be called whenever the guard condition is triggered.
The callback receives a size_t which is the number of times the guard condition was triggered since the last time this callback was called. Normally this is 1, but can be > 1 if the guard condition was triggered before any callback was set.
Calling it again will clear any previously set callback.
This function is thread-safe.
If you want more information available in the callback, like the guard condition or other information, you may use a lambda with captures or std::bind.
[in] | callback | functor to be called when the guard condition is triggered |
Definition at line 115 of file guard_condition.cpp.
void rclcpp::GuardCondition::trigger | ( | ) |
Signal that the condition has been met, notifying both the wait set and listeners, if any.
This function is thread-safe, and may be called concurrently with waiting on this guard condition in a wait set.
rclcpp::exceptions::RCLError | based exceptions when underlying rcl functions fail. |
Definition at line 70 of file guard_condition.cpp.
References RCL_RET_OK, and rcl_trigger_guard_condition().