// 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; } } }