47 Thread = std::thread(&WorkerThread::Run,
this);
68 if (Thread.joinable())
72 std::lock_guard lock(threadsPool->Mutex);
75 Thread = std::thread(&WorkerThread::Run,
this);
85 if (!Thread.joinable())
89 std::lock_guard lock(threadsPool->Mutex);
114 if (Thread.joinable())
127 if (Thread.joinable())
128 (void)
new std::thread(std::move(Thread));
141 inline bool TerminateWait()
const
143 return threadsPool->HasWork() || StopFlag;
158 std::unique_lock lock(threadsPool->Mutex);
159 if (!TerminateWait())
160 threadsPool->Condition.wait(lock, [
this] {
return TerminateWait(); });
162 while (threadsPool->HasWork() && !StopFlag)
164 std::shared_ptr<Job> job = std::move(threadsPool->JobsQueue.front());
165 threadsPool->JobsQueue.pop();
166 ++threadsPool->Running;
170 const size_t count = job->GetJobCount();
179 --threadsPool->Running;
181 std::lock_guard lockCount(threadsPool->FinishMutex);
182 threadsPool->FinishCount += count;
189 threadsPool->NotifyFinish();
193 ThreadsPool *threadsPool;