Go to the documentation of this file.
8 #ifndef RAD_EXECUTOR_ACTIVITY_HPP
9 #define RAD_EXECUTOR_ACTIVITY_HPP
10 #define BOOST_THREAD_PROVIDES_FUTURE
13 #include <boost/thread/future.hpp>
14 #include <boost/asio/post.hpp>
16 #include <scxml4cpp/Activity.h>
17 #include <rad/stopToken.hpp>
38 template <
class Executor,
class Func>
42 :
Activity(id), m_executor(
std::move(ex)), m_func(
std::move(func)), m_done(), m_stop_source() {
67 boost::future<void> m_done;
75 template <
class Executor,
class Func>
85 boost::promise<void> p;
86 m_done = p.get_future();
87 boost::asio::post(m_executor, [f = m_func, ex=m_executor, token=m_stop_source.GetToken(), done = std::move(p)]()
mutable {
88 RAD_ASSERT(token.StopPossible());
89 std::invoke(f, ex, token);
94 template<
class Executor,
class Func>
97 if (!m_stop_source.StopPossible()) {
103 m_stop_source.RequestStop();
106 std::cout <<
"Await stop of activity\n";
108 std::cout <<
"stop of activity\n";
109 }
catch (boost::future_uninitialized
const&) {
111 }
catch (boost::broken_promise
const&) {
120 #endif // RAD_EXECUTOR_ACTIVITY_HPP
boost::asio::io_context::executor_type Executor
Definition: testExecutorActivity.cpp:13
Definition: Activity.h:40
void start(scxml4cpp::Context *c) override
Disable assignment operator.
Definition: executorActivity.hpp:76
ExecutorActivity(const ExecutorActivity &)=delete
Definition: stopToken.hpp:112
ExecutorActivity & operator=(const ExecutorActivity &)=delete
Disable copy constructor.
Definition: actionCallback.hpp:21
Activity(const std::string &id)
Definition: Activity.cpp:32
std::reference_wrapper< MockFunc > Func
Definition: testExecutorActivity.cpp:35
Definition: errors.hpp:58
Definition: executorActivity.hpp:39
void stop(scxml4cpp::Context *c) override
Definition: executorActivity.hpp:96
ExecutorActivity(const std::string &id, Executor ex, Func &&func)
Definition: executorActivity.hpp:41