ifw-ccf  3.0.0-pre2
thread.hpp
Go to the documentation of this file.
1 
5 #ifndef IFW_CCF_MPTK_THREAD_HPP_
6 #define IFW_CCF_MPTK_THREAD_HPP_
7 
8 #include <string>
9 #include <thread>
10 #include <mutex>
11 #include <time.h>
12 
13 #include <rad/logger.hpp>
14 #include <rad/exceptions.hpp>
15 
16 #include <ccf/mptk/messageBus.hpp>
17 
18 namespace ccf::mptk {
19  const std::string THREAD_REGISTRY = "ThreadRegistry";
20 
22  void SleepUntil(struct timespec* ts,
23  int delay);
24 
29  class Thread {
30  public:
31  static std::map<std::string, Thread*> s_thread_registry;
32 
34  typedef enum {
39 
46  Thread(const std::string& thread_name,
47  MessageBus& message_bus,
48  const double period = 0.1);
49  // TODO: Add Thread name in signature.
50 
51  virtual ~Thread();
52 
54  void SetPriority(const int prio = -1);
55 
57  std::string GetName() const;
58 
60  void Run();
61 
67  virtual void UserLogic();
68 
70  void Start();
71 
73  void Stop();
74 
76  void Pause();
77 
79  void Continue();
80 
81  // Get current drift (in seconds).
82  double GetDrift() const;
83 
91  bool GetExecFlag();
92 
95 
97  bool Terminated();
98 
100  MessageBus& MsgBus();
101 
103  std::string ToString() const;
104 
105  private:
106  std::string m_thread_name;
107  double m_period;
108  ThreadExecControl m_exec_flag;
109  double m_start_time;
110  uint64_t m_iteration_count;
111  double m_drift;
112  double m_previous_start_time;
113  double m_next_execution;
114  bool m_thread_terminated;
115  bool m_gen_statistics;
116  struct sched_param m_sched_par;
117 
118  std::unique_ptr<std::thread> m_sys_thread;
119  MessageBus* m_message_bus;
120  std::recursive_mutex m_thr_mutex;
121  };
122 
123 }
124 
125 #endif // IFW_CCF_MPTK_THREAD_HPP_
126 
IFW CTD Multiprocessing Toolkit Message Bus.
Definition: messageBus.hpp:91
IFW CTD Multiprocessing Toolkit Thread base class.
Definition: thread.hpp:29
MessageBus & MsgBus()
Get acces to the MessageBus associated with this thread object.
Definition: thread.cpp:212
bool GetExecFlag()
Check the Thread Execution Flag. The Thread Execution Flag shall be called regularly in the thread,...
Definition: thread.cpp:186
static std::map< std::string, Thread * > s_thread_registry
Definition: thread.hpp:31
bool Terminated()
Returns true if thread no longer running.
Definition: thread.cpp:217
virtual void UserLogic()
User provided business logic. The UserLogic method need not execute an internal loop....
Definition: thread.cpp:131
ThreadExecControl
Thread execution control/status.
Definition: thread.hpp:34
@ THREAD_EXEC_RUNNING
Definition: thread.hpp:36
@ THREAD_EXEC_PAUSED
Definition: thread.hpp:37
@ THREAD_EXEC_STOPPED
Definition: thread.hpp:35
Thread(const std::string &thread_name, MessageBus &message_bus, const double period=0.1)
Constructor method, setting up the internal members.
Definition: thread.cpp:41
void SetPriority(const int prio=-1)
If invoked, it will run the thread in real-time mode with the given priority [0; 99].
Definition: thread.cpp:117
void Pause()
Pause the thread execution.
Definition: thread.cpp:171
virtual ~Thread()
Definition: thread.cpp:67
std::string GetName() const
Return the thread Name.
Definition: thread.cpp:72
double GetDrift() const
Definition: thread.cpp:158
void Run()
Method to invoke the user provided business logic of the thread. The method executes internally a loo...
Definition: thread.cpp:77
std::string ToString() const
Generate ASCII output providing a status of the object.
void Start()
Start the thread execution.
Definition: thread.cpp:142
void Stop()
Stop the thread execution.
Definition: thread.cpp:163
void Continue()
Continue a paused thread execution.
Definition: thread.cpp:178
Definition: manager.hpp:15
void SleepUntil(struct timespec *ts, int delay)
Adds "delay" nanoseconds to timespecs and sleeps until that time.
Definition: thread.cpp:17
const std::string THREAD_REGISTRY
Definition: thread.hpp:19