コード例 #1
0
ファイル: test.cpp プロジェクト: bvdberg/code
int main() {
    // register tasks
    addTask(task1Init, task1Processor, task1Cancel);
    addTask(task2Init, task2Processor, task2Cancel);

    // run init
    for (Task* task=task_head; task!=0; task = task->next) {
        task->init(task->id);
    }


int Task->action
void task_init()     // called at Start command, puts task in queue
int task_process()   // called while true. If returns 0, remove task from queue
int task_progress()  // called by Progress command
void task_cancel()   // called by Cancel command

    for (Task* task=task_head; task!=0; task = task->next) {
        if (task->action) {
            switch (task->action) {
                case START:
                    // check if running
                    task_init();
                    break;
                case PROGRESS:
                    // check if running
                    int progress = task_progress();
                    // ...
                    break;
                case CANCEL:
                    // check if running
                    task_cancel();
                    removeFromRunning(task);
                    break;
            }
        } else {
            int result = task_process();
            if (result == DONE) removeFromRunning(task);
        }
    }

    // main loop
    int tick = 0;
    while (tick < 100) {
        for (Task* task=task_head; task!=0; task = task->next) {
            if (task->events) {
                task->events = task->process(task->events);
            }
            // MANUALLY INSERT EVENTS
            if (task->id==1 && tick==10) task->events = 30;
            if (task->id==1 && tick==20) interrupt();
            if (task->id==2 && tick==15) task->events = 152;
        }
        tick++;
    }
    

    return 0;
}
コード例 #2
0
ファイル: TaskHandler.cpp プロジェクト: volyrique/esesc
void TaskHandler::syncRunning(){
  /* syncs the running queue with emul  {{{1 */
  pthread_mutex_lock (&mutex);

  for(size_t i=0; i<allmaps.size(); i++)
  {
    if (!allmaps[i].active)
    {
      I(0);
      removeFromRunning(i);
    }
  }
  pthread_mutex_unlock (&mutex);
}
コード例 #3
0
ファイル: TaskHandler.cpp プロジェクト: volyrique/esesc
void TaskHandler::pauseThread(FlowID fid){
  /* deactivae an fid {{{1 */

  I(allmaps[fid].fid == fid);
  I(fid<65535);

  pthread_mutex_lock (&mutex);

  if (!allmaps[fid].active){
    //MSG("TaskHandler::pauseThread(%d) not needed, since it is not active",fid);
    pthread_mutex_unlock (&mutex);
    return;
  }

  removeFromRunning(fid);
  allmaps[fid].active = false;
  allmaps[fid].simu->clearActive();
  pthread_mutex_unlock (&mutex);
}