void Scheduler(char* filename,Task* tasks, int num,int (*staticComparer)(const void*,const void*), int isDynamic, int (*dynamicComparer)(const void*,const void*)){ FILE* output; float currentTime, finishTime, nextTime; int missedTaskID; RunTask* taskQueue = NULL,*currentTask = NULL; currentTime = 0.0; finishTime = lcmPeriod(tasks,num); taskQueue = (RunTask*)malloc( sizeof(RunTask)*(num + 1) ); /*PLUS ONE FOR IDLE*/ CreateTaskQueue(&taskQueue,tasks,num,staticComparer); output = fopen(filename,"w"); printTitles(output,num); while(currentTime < finishTime){ PickTask(taskQueue,num, ¤tTask); nextTime = CalculateNext(&taskQueue,num,currentTask,currentTime); missedTaskID = CheckDeadLineMiss(taskQueue,num,nextTime); UpdateQueue(&taskQueue, num, currentTask,currentTime,nextTime,isDynamic,tasks,dynamicComparer,output); if (missedTaskID){ fprintf(output," T%d missed it's deadline.", missedTaskID); break; } currentTime = nextTime; fprintf(output,"\n"); } fclose(output); free(taskQueue); }
/* static */ PlatformDecoderModule* PlatformDecoderModule::CreateCDMWrapper(CDMProxy* aProxy, bool aHasAudio, bool aHasVideo, MediaTaskQueue* aTaskQueue) { bool cdmDecodesAudio; bool cdmDecodesVideo; { CDMCaps::AutoLock caps(aProxy->Capabilites()); cdmDecodesAudio = caps.CanDecryptAndDecodeAudio(); cdmDecodesVideo = caps.CanDecryptAndDecodeVideo(); } nsAutoPtr<PlatformDecoderModule> pdm; if ((!cdmDecodesAudio && aHasAudio) || (!cdmDecodesVideo && aHasVideo)) { // The CDM itself can't decode. We need to wrap a PDM to decode the // decrypted output of the CDM. pdm = Create(); if (!pdm) { return nullptr; } } return new EMEDecoderModule(aProxy, pdm.forget(), cdmDecodesAudio, cdmDecodesVideo, CreateTaskQueue()); }
TaskQueue* StartJob(Master* m,ResultBoard *rb) { TaskQueue *tq = CreateTaskQueue(10); for(int i = 0;i < m->onJobNumber;++i) { m->workers[i].tq = tq; m->workers[i].rb = rb; pthread_create(&((m->workers[i]).id),NULL,(void *(*)(void *))StartWorker,&(m->workers[i])); } return tq; }