Writing an asynchronous publisher ========================================== Sometimes, it is required to publish infromation at a fixed frequency in the background independently from the main process. In such cases, we can utlise the async functionaality in C++ for concurrent programming. .. code-block:: c #include "PositionPubSubTypes.h" #include "domain_participant.h" #include "geometry_msgs/msgs/Position.h" #include "publisher.h" #include #include std::atomic_bool close_flag{}; void async_publisher(const int delay_ms, DDSPublisher *pub) { // create message of position cpp_msg::Position pos_msg; while (!close_flag) { pos_msg.x = 1; pos_msg.y = 2; pos_msg.z = 3; pub->publish(pos_msg); std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms)); } } int main() { // Create participant. Arguments: Domain id, Name DefaultParticipant dp(0, "sample_participant"); // Create publisher with msg type and topic name DDSPublisher position_pub(idl_msg::PositionPubSubType(), "position", dp.participant()); // start asynchronous publisher auto async_pub = std::async(std::launch::async, async_publisher, 100, &position_pub); std::cin.ignore(); // set close_flag and wait for asynchronous publisher to close close_flag = true; }