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>
38template <
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;
75template <
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);
94template<
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&) {
Definition executorActivity.hpp:39
ExecutorActivity(const ExecutorActivity &)=delete
ExecutorActivity(const std::string &id, Executor ex, Func &&func)
Definition executorActivity.hpp:41
ExecutorActivity & operator=(const ExecutorActivity &)=delete
Disable copy constructor.
void start(scxml4cpp::Context *c) override
Disable assignment operator.
Definition executorActivity.hpp:76
void stop(scxml4cpp::Context *c) override
Definition executorActivity.hpp:96
Definition stopToken.hpp:112
Activity(const std::string &id)
Definition Activity.cpp:37
Definition actionsApp.cpp:23
StopToken and StopSource header.
boost::asio::io_context::executor_type Executor
Definition testExecutorActivity.cpp:14
std::reference_wrapper< MockFunc > Func
Definition testExecutorActivity.cpp:39