Esempio n. 1
0
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, &currentTask);
		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);
}
Esempio n. 2
0
/* 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());
}
Esempio n. 3
0
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;
}