示例#1
0
void ThreadPool::WorkerThread::operator()()
{
	Job *job = NULL;

	while (true)
	{
		{
			std::unique_lock<std::mutex> lock(pool.queue_mutex);

			// look for a work item
			while (!pool.stop && pool.jobs.empty())
			{
				pool.condition.wait(lock);
			}

			if (pool.stop && pool.jobs.empty()) // exit if the pool is stopped and we have no more jobs
			{
				return;
			}

			job = pool.jobs.front();
			pool.jobs.pop_front();
		}

		job->Execute();

		if (job->GetJobBatch() != NULL)
		{
			std::unique_lock<std::mutex> lock(pool.batch_mutex);

			JobBatch *jobBatch = job->GetJobBatch();
			jobBatch->CompletedJob(job);

			if (jobBatch->GetNumJobs() == 0)
			{
				jobBatch->SetCompletedAllJobs();
			}
		}
	}
}