1#ifndef BMNABSTRACTTHREAD_H
2#define BMNABSTRACTTHREAD_H 1
5#include <condition_variable>
14#pragma GCC system_header
16using CClock = std::chrono::steady_clock;
17using CPoint = std::chrono::time_point<CClock>;
26 std::lock_guard<std::mutex> statLock(statVarAccess);
29 std::unique_lock<std::mutex> dataLock(dataAccess);
32 std::lock_guard<std::mutex> statLock(statVarAccess);
36 ctime = CClock::now();
38 proceed.wait(dataLock, [
this] {
return dataReady; });
40 std::lock_guard<std::mutex> statLock(statVarAccess);
46 ctime1 += CClock::now() - ctime;
53 ctime = CClock::now();
61 ctime2 += CClock::now() - ctime;
65 std::lock_guard<std::mutex> queueLock(*queueAccess);
67 queueWait->notify_one();
70 std::lock_guard<std::mutex> statLock(statVarAccess);
78 return curThreadCount;
86 return curThreadWaiting;
109 std::cout <<
"Abstract method is called!\n";
114 std::lock_guard<std::mutex> dataLock(dataAccess);
116 proceed.notify_one();
121 std::lock_guard<std::mutex> queueLock(*queueAccess);
123 queueWait->notify_one();
126 virtual void SetInitData(...) { std::cout <<
"Abstract method is called!\n"; }
127 virtual void SetData(...) { std::cout <<
"Abstract method is called!\n"; }
131 std::mutex* queueAccess,
132 std::condition_variable* queueWait,
134 bool measureTime =
false)
135 : threadQueue(threadQueue)
136 , queueAccess(queueAccess)
137 , queueWait(queueWait)
141 , measureTime(measureTime)
154 virtual void Calculate() { std::cout <<
"Abstract method is called!\n"; }
158 static const bool calcStatistics;
159 static std::mutex statVarAccess;
160 static int32_t curThreadWaiting;
161 static int32_t curThreadCount;
163 const bool measureTime;
169 std::condition_variable* queueWait;
170 std::queue<int32_t>* threadQueue;
171 std::mutex* queueAccess;
173 std::condition_variable proceed;
174 std::mutex dataAccess;
virtual void SetInitData(...)
virtual void SetData(...)
CDuration GetCalculationCTime()
BmnAbstractThread(std::queue< int32_t > *threadQueue, std::mutex *queueAccess, std::condition_variable *queueWait, int32_t id, bool measureTime=false)
int32_t GetRunningThreads()
int32_t GetWaitingThreads()
CDuration GetWaitingCTime()
std::chrono::duration< double > CDuration
std::chrono::time_point< CClock > CPoint
std::chrono::steady_clock CClock
std::chrono::duration< double > CDuration