21 #include "sleep_action_executor.h"
23 #include <golog++/model/activity.h>
24 #include <logging/logger.h>
52 wait_cond_.notify_all();
53 for (
auto &fut : running_sleeps_) {
61 return activity->mapped_name() ==
"sleep";
68 throw Exception(
"Cannot execute activity '%s' with SleepActionExecutor",
69 activity->mapped_name().c_str());
71 activity->update(gologpp::Transition::Hook::START);
72 const std::chrono::duration sleep_duration =
73 std::chrono::seconds(
static_cast<long>(activity->mapped_arg_value(
"seconds")));
74 running_sleeps_.push_back(std::async(std::launch::async, ([
this, sleep_duration, activity] {
75 std::unique_lock<std::mutex> lock(cancel_mutex_);
76 auto status = wait_cond_.wait_for(lock, sleep_duration);
77 if (status == std::cv_status::timeout
79 == gologpp::Activity::State::RUNNING) {
80 activity->update(gologpp::Transition::Hook::FINISH);
83 running_sleeps_.remove_if([&](
auto &fut) {
84 return fut.wait_for(std::chrono::milliseconds(0)) == std::future_status::ready;