4 #include <actionlib/client/action_client.h> 
    5 #include <ros/callback_queue.h> 
   12 template <
class ActionSpec, 
class TimeoutDuration, 
class PeriodDuration>
 
   14     actionlib::ActionClient<ActionSpec>& actionClient,
 
   15     ::ros::CallbackQueue& callbackQueue,
 
   16     TimeoutDuration timeoutDuration,
 
   17     PeriodDuration periodDuration)
 
   19   using Clock = std::chrono::steady_clock;
 
   21   const auto startTime = Clock::now();
 
   22   const auto endTime = startTime + timeoutDuration;
 
   23   auto currentTime = startTime;
 
   25   while (currentTime < endTime)
 
   27     callbackQueue.callAvailable();
 
   30     if (actionClient.isServerConnected())
 
   33     currentTime += periodDuration;
 
   34     std::this_thread::sleep_until(currentTime);