45 : threadsPool(threadsPool), StopFlag(false) {
46 Thread = std::thread(&WorkerThread::Run,
this);
63 if (Thread.joinable())
return;
66 std::lock_guard lock(threadsPool->Mutex);
69 Thread = std::thread(&WorkerThread::Run,
this);
78 if (!Thread.joinable())
return;
81 std::lock_guard lock(threadsPool->Mutex);
102 if (Thread.joinable()) Thread.join();
115 inline bool TerminateWait()
const {
116 return threadsPool->HasWork() || StopFlag;
129 std::unique_lock lock(threadsPool->Mutex);
130 if (!TerminateWait())
131 threadsPool->Condition.wait(lock, [
this] {
return TerminateWait(); });
133 while (threadsPool->HasWork() && !StopFlag) {
134 const std::shared_ptr<Job> job =
135 std::move(threadsPool->JobsQueue.front());
136 threadsPool->JobsQueue.pop();
142 std::lock_guard lockCount(threadsPool->FinishMutex);
143 threadsPool->FinishCount += job->GetJobCount();
150 threadsPool->NotifyFinish();