rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
43  ThreadBaseActivity(ThreadBaseActivity const&) = delete;
47  void start() override;
48  void stop() 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;
106  ThreadActivity& operator=(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
virtual void Run()=0
virtual pthread_t GetNativeHandle() const =0
virtual void StartThread()=0
std::string GetName() const
Definition: activity.cpp:71
Definition: Activity.h:39
virtual bool IsThreadJoined() const =0
int SetName(const std::string &name)
Definition: activity.cpp:90
ThreadActivity(const ThreadActivity &)=delete
void StartThread() override
Definition: activity.cpp:43
void JoinThread() override
Definition: activity.cpp:57
ThreadBaseActivity(ThreadBaseActivity const &)=delete
virtual void JoinThread()=0
bool IsThreadJoined() const override
Definition: activity.cpp:35
void stop() override
Definition: activity.cpp:29
pthread_t GetNativeHandle() const override
Definition: activity.cpp:113
Definition: activity.hpp:39
Definition: activity.hpp:101
void start() override
Definition: activity.cpp:23
ThreadActivity & operator=(const ThreadActivity &)=delete
bool IsStopRequested() const
To be implemented by child classes.
Definition: activity.hpp:71