示例#1
0
// Check if a queued job needs to be started
void Scheduler::Loop()
{
	usleep(100000);				  // every 0.1 sec

	double now = time::dtime();

	while(scheduler_queue.GetQueueSize() != 0 && scheduler_queue.NextJobTime() < now)
	{
		/* We remove job from queue before calling it, to prevent
		 * crash if it tries to change queue list.
		 */
		Job* job = scheduler_queue.PopJob();

		if(job)				  /* The queue may have been emptied externaly */
		{
			pf_log[W_DEBUG] << "Begining handling job \"" << typeid(job).name() << "\". Queue_size:" <<scheduler_queue.GetQueueSize();
			if(job->DoStart())
				scheduler_queue.Queue(job);
			else
				delete job;
		}
	}
}