44 : threadsPool(threadsPool), StopFlag(false) {
45 Thread = std::thread(&WorkerThread::Run,
this);
62 if (Thread.joinable())
66 std::lock_guard lock(threadsPool->Mutex);
69 Thread = std::thread(&WorkerThread::Run,
this);
78 if (!Thread.joinable())
82 std::lock_guard lock(threadsPool->Mutex);
103 if (Thread.joinable())
117 inline bool TerminateWait()
const {
118 return threadsPool->HasWork() || StopFlag;
131 std::unique_lock lock(threadsPool->Mutex);
132 if (!TerminateWait())
133 threadsPool->Condition.wait(lock, [
this] {
return TerminateWait(); });
135 while (threadsPool->HasWork() && !StopFlag) {
136 const std::shared_ptr<Job> job =
137 std::move(threadsPool->JobsQueue.front());
138 threadsPool->JobsQueue.pop();
144 std::lock_guard lockCount(threadsPool->FinishMutex);
145 threadsPool->FinishCount += job->GetJobCount();
153 threadsPool->NotifyFinish();