STE-Industries: utilities testing
Thread.cpp
Go to the documentation of this file.
1 
14 # include "Graphic.h"
15 # include "SystemException.h"
16 # include "Thread.h"
17 
18 # include <signal.h>
19 
20 namespace GraphicSpace
21 {
22 
23 pthread_attr_t Thread::ThreadAttribute;
24 
25 pthread_t Thread::MainThreadId;
26 
36 
37 Thread::Thread(void) noexcept: ThreadId(MainThreadId)
38  {
39  }
40 
53 
54 Thread::~Thread(void) noexcept
55  {
56  if (not pthread_equal(ThreadId, MainThreadId))
57  Kill();
58  }
59 
78 
79 void Thread::Initialize(void) noexcept(false)
80  {
81  sched_param SchedulingParameter;
82 
83  if (pthread_attr_init(&ThreadAttribute) != ATTRIBUTE_INIT_OK)
86  if (pthread_attr_setschedpolicy(&ThreadAttribute, SCHED_OTHER) !=
87  ATTRIBUTE_SET_OK)
90  if (pthread_attr_setdetachstate(&ThreadAttribute,
91  PTHREAD_CREATE_JOINABLE) != ATTRIBUTE_SET_OK)
94  SchedulingParameter.sched_priority = 0;
95  if (pthread_attr_setschedparam(&ThreadAttribute,
96  &SchedulingParameter) != ATTRIBUTE_SET_OK)
99  if (pthread_attr_setinheritsched(&ThreadAttribute,
100  PTHREAD_EXPLICIT_SCHED) != ATTRIBUTE_SET_OK)
103  }
104 
114 
115 void Thread::Finalize(void) noexcept
116  {
117  IgnoreValue(pthread_attr_destroy(&ThreadAttribute));
118  }
119 
147 
148 void Thread::Start(ThreadFunctionType ThreadFunction, void* Argument)
149  noexcept(false)
150  {
151  if (not pthread_equal(ThreadId, MainThreadId))
154  if (pthread_create(&ThreadId, &ThreadAttribute, ThreadFunction,
155  Argument) != THREAD_CREATE_OK)
158  }
159 
173 
174 void Thread::Kill(void) noexcept(false)
175  {
176  if (pthread_equal(ThreadId, MainThreadId))
179  IgnoreValue(pthread_kill(ThreadId, SIGKILL));
180  ThreadId = MainThreadId;
181  }
182 
196 
197 void Thread::Join(void) noexcept(false)
198  {
199  if (pthread_equal(ThreadId, MainThreadId))
202  if (pthread_join(ThreadId,
203  static_cast<void **>(NULL)) != THREAD_JOIN_OK)
206  ThreadId = MainThreadId;
207  }
208 
209 }
GraphicSpace::Thread::Thread
Thread(void) noexcept
Definition: Thread.cpp:37
GraphicSpace::SystemException
Definition: SystemException.h:72
GraphicSpace::Thread::MainThreadId
static pthread_t MainThreadId
Definition: Thread.h:64
GraphicSpace::Thread::Start
void Start(ThreadFunctionType ThreadFunction, void *Argument) noexcept(false)
Definition: Thread.cpp:148
GraphicSpace::Thread::~Thread
~Thread(void) noexcept
Definition: Thread.cpp:54
Graphic.h
GraphicSpace::Thread::ThreadAttribute
static pthread_attr_t ThreadAttribute
Definition: Thread.h:60
GraphicSpace::SystemExceptionType::THREAD_INITIALIZATION_FAILED
@ THREAD_INITIALIZATION_FAILED
Thread.h
GraphicSpace::Thread::Initialize
static void Initialize(void) noexcept(false)
Definition: Thread.cpp:79
GraphicSpace::Thread::Join
void Join(void) noexcept(false)
Definition: Thread.cpp:197
GraphicSpace::SystemExceptionType
SystemExceptionType
Definition: SystemException.h:34
GraphicSpace::Thread::Finalize
static void Finalize(void) noexcept
Definition: Thread.cpp:115
SystemException.h
GraphicSpace
Definition: Bitmap.cpp:29
GraphicSpace::Thread::Kill
void Kill(void) noexcept(false)
Definition: Thread.cpp:174
GraphicSpace::SystemExceptionType::INVALID_THREAD_OPERATION
@ INVALID_THREAD_OPERATION
IgnoreValue
#define IgnoreValue(Expression)
Definition: Graphic.h:55
GraphicSpace::SystemExceptionType::THREAD_CREATION_FAILED
@ THREAD_CREATION_FAILED