From 930d158f4d24712e23ffe3573a91c503e6277cf5 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Wed, 2 Jun 2021 17:42:31 +0200
Subject: [PATCH] termination condition + doxy comment

---
 .../RobotUnitComponentPlugin.cpp                     |  4 ++--
 .../RobotUnitComponentPlugin.h                       | 12 +++++++++++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
index b669bf0db..7d32ae794 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.cpp
@@ -137,11 +137,11 @@ namespace armarx
         return *plugin;
     }
 
-    void RobotUnitComponentPluginUser::waitUntilRobotUnitIsRunning() const
+    void RobotUnitComponentPluginUser::waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond) const
     {
         ARMARX_INFO << "Waiting until robot unit is running ...";
 
-        while ((isNullptr(getRobotUnit()) or (not getRobotUnit()->isRunning())))
+        while ((not termCond()) and ((isNullptr(getRobotUnit()) or (not getRobotUnit()->isRunning()))))
         {
             std::this_thread::sleep_for(std::chrono::milliseconds(100));
         }
diff --git a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
index 5b8369776..63d78de7d 100644
--- a/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
+++ b/source/RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h
@@ -80,7 +80,17 @@ namespace armarx
         RobotUnitComponentPluginUser();
 
         RobotUnitInterfacePrx getRobotUnit() const;
-        void waitUntilRobotUnitIsRunning() const;
+
+        /**
+         * @brief Waits until the robot unit is running.
+         * 
+         * Although the robot unit proxy might be initialized (\see getRobotUnit()), the robot unit might
+         * not be fully initialized. 
+         * 
+         * @param termCond Termination condition. If it evaluates to true, waitUntilRobotUnitIsRunning returns without waiting 
+        *                  for the robot unit to become available.
+         */
+        void waitUntilRobotUnitIsRunning(const std::function<bool()>& termCond = [] {return false;}) const;
 
         plugins::RobotUnitComponentPlugin& getRobotUnitComponentPlugin();
     private:
-- 
GitLab