void JobQueue::process_jobs(void) { Uint32 j; Job *job; Uint32 max_num = active_jobs.size(); if(0 == max_num){ Job *job = get_next_job(); if(job) { active_jobs.push_back(job); max_num = 1; } } for(j=0; j<max_num; ++j){ job = active_jobs[j]; job->process(); if (job->is_finished){ finish_job(job); Job *new_job = get_next_job(); if(new_job){ active_jobs[j] = new_job; }else{ active_jobs.erase(active_jobs.begin() + j); max_num = active_jobs.size(); --j; } delete job; } } }
// Executes the jobs in a queue. saves and restores Trick::Executive::curr_job int Trick::ScheduledJobQueue::execute_all_jobs() { Trick::JobData * curr_job ; int ret ; reset_curr_index() ; while ( (curr_job = get_next_job()) != NULL ) { ret = curr_job->call() ; if ( ret != 0 ) { return ret ; } } /* return 0 if there are no errors. */ return 0 ; }
int Trick::ScheduledJobQueue::write_non_sched_queue( FILE * fp ) { Trick::JobData * curr_job ; unsigned int save_index ; save_index = get_curr_index() ; reset_curr_index() ; while ( (curr_job = get_next_job()) != NULL ) { if ( curr_job->job_class_name.compare("instrumentation") ) { /* for each non instrumentation job write the job information to the open file pointer "fp" */ fprintf(fp, "%7d | %3d |%-25s| %-5d | | | | %5.02f | %s\n", !curr_job->disabled, curr_job->thread, curr_job->job_class_name.c_str(), curr_job->phase, curr_job->frame_id, curr_job->name.c_str()); } } set_curr_index(save_index) ; return(0) ; }