rad  3.0.0
activity.hpp
Go to the documentation of this file.
1 
8 #ifndef RAD_ACTIVITY_HPP
9 #define RAD_ACTIVITY_HPP
10 
11 #include <scxml4cpp/Activity.h>
12 
13 #include <atomic>
14 #include <string>
15 #include <thread>
16 
17 namespace rad {
18 
40  public:
41  using Activity::Activity;
42 
47  void start(scxml4cpp::Context* c) override;
48  void stop(scxml4cpp::Context* c) override;
49 
53  std::string GetName() const;
54 
61  int SetName(const std::string& name);
62 
66  virtual pthread_t GetNativeHandle() const = 0;
67 
69  // @{
70  // Method used by child classes to check whether they should be stopping
71  inline bool IsStopRequested() const { return m_stop_requested.load(std::memory_order_acquire); }
72  virtual bool IsThreadJoined() const = 0;
73 
74  protected:
75  // @todo Add error code?
76  virtual void StartThread() = 0;
77  virtual void JoinThread() = 0;
78  // returns true if thread is joined == not running.
79  // @}
80 
81  private:
82  std::atomic<bool> m_stop_requested;
83 };
84 
102  public:
104 
105  ThreadActivity(const ThreadActivity&) = delete;
107 
108  virtual void Run() = 0;
109 
110  pthread_t GetNativeHandle() const override;
111 
112  bool IsThreadJoined() const override;
113 
114  protected:
115  void StartThread() override;
116  void JoinThread() override;
117 
118  private:
119  std::thread m_thread;
120 };
121 
122 } // namespace rad
123 
124 #endif // RAD_ACTIVITY_HPP
rad::ThreadActivity::StartThread
void StartThread() override
Definition: activity.cpp:45
rad::ThreadBaseActivity::GetName
std::string GetName() const
Definition: activity.cpp:73
wscript.name
name
Definition: wscript:8
scxml4cpp::Activity
Definition: Activity.h:40
rad::ThreadBaseActivity::ThreadBaseActivity
ThreadBaseActivity(ThreadBaseActivity const &)=delete
rad::ThreadActivity::IsThreadJoined
bool IsThreadJoined() const override
Definition: activity.cpp:37
rad::ThreadBaseActivity::JoinThread
virtual void JoinThread()=0
rad::ThreadActivity::JoinThread
void JoinThread() override
Definition: activity.cpp:59
rad::ThreadBaseActivity::IsThreadJoined
virtual bool IsThreadJoined() const =0
rad::ThreadActivity::operator=
ThreadActivity & operator=(const ThreadActivity &)=delete
rad::ThreadBaseActivity::StartThread
virtual void StartThread()=0
rad
Definition: actionCallback.hpp:21
rad::ThreadBaseActivity::GetNativeHandle
virtual pthread_t GetNativeHandle() const =0
rad::ThreadActivity::Run
virtual void Run()=0
rad::ThreadBaseActivity::SetName
int SetName(const std::string &name)
Definition: activity.cpp:92
rad::ThreadActivity::ThreadActivity
ThreadActivity(const ThreadActivity &)=delete
rad::ThreadBaseActivity::IsStopRequested
bool IsStopRequested() const
To be implemented by child classes.
Definition: activity.hpp:71
rad::ThreadActivity::GetNativeHandle
pthread_t GetNativeHandle() const override
Definition: activity.cpp:115
rad::ThreadBaseActivity
Definition: activity.hpp:39
rad::ThreadBaseActivity::stop
void stop(scxml4cpp::Context *c) override
Definition: activity.cpp:30
rad::ThreadActivity
Definition: activity.hpp:101
rad::ThreadBaseActivity::start
void start(scxml4cpp::Context *c) override
Definition: activity.cpp:23
scxml4cpp::Context
Definition: Context.h:44