void TaskAllocator::readTasks(QString filename){ QFile file(filename); int taskNum = 0; completeTasks = 0; if(file.open(QIODevice::ReadOnly)){ QTextStream in(&file); while(!in.atEnd()){ QString line = in.readLine(); qDebug() << "line read: " << line; QStringList task = line.split(","); double x = task[0].toDouble(); double y = task[1].toDouble(); int r = task[2].toInt(); int w = task[3].toInt(); Objective o(x,y,r,w); tasks[taskNum] = o; tasks[taskNum].setCompleted(false); taskNum++; } file.close(); taskCount = taskNum; currentTask = -1; qDebug() << taskCount; assignNextTask(); }else{ qDebug() << file.errorString(); } }
void TaskAllocator::taskCompleted(int index){ //tasks[index].setCompleted(true); completeTasks++; if(completeTasks < taskCount){ assignNextTask(); }else{ emit tasksComplete(); } }
void TaskAllocator::chooseWinner(){ qDebug() << "choosing winner"; tasks[currentTask].setCompleted(true); int winner = -1; int winner2 = -1; for(int i = 0; i < MAX_BIDS; i++){ qDebug() << strengths[i]; if(strengths[i] >= tasks[currentTask].getWeight() || tasks[currentTask].getRNum() == 2){ if(bids[i] < bids[winner] || winner == -1){ if(tasks[currentTask].getRNum() == 2 && winner > -1){ if(strengths[i] + strengths[winner] >= tasks[currentTask].getWeight()){ winner2 = winner; }else{ continue; } } winner = i; } } } for(int i = 0; i < MAX_BIDS; i++){ bids[i] = 100; strengths[i] = 0; } if(winner == -1 || (tasks[currentTask].getRNum() == 2 && winner2 == -1)){ tasks[currentTask].setCompleted(false); assignNextTask(); }else { activeBots--; if(tasks[currentTask].getRNum() == 2){ activeBots--; } emit winnerFound(winner+1,winner2+1); } }
/** the main loop for a task creator */ void TaskCreator::mainLoop(){ if(!m_initialized){ #ifdef DEBUG_TASK_CREATOR cout<<"Initializing"<<endl; #endif initializeMethod(); m_initialized=true; m_completedJobs=0; } if(hasUnassignedTask()){ if(m_virtualProcessor->canAddWorker()){ Worker*worker=assignNextTask(); #ifdef DEBUG_TASK_CREATOR cout<<"Adding worker to pool worker= "<<worker<<" processor="<<m_virtualProcessor<<endl; #endif #ifdef CONFIG_ASSERT assert(worker != NULL); assert(m_virtualProcessor != NULL); #endif m_virtualProcessor->addWorker(worker); /* tell the VirtualProcessor that no more tasks will be created */ if(!hasUnassignedTask()){ #ifdef DEBUG_TASK_CREATOR cout<<"No more task are coming."<<endl; #endif m_virtualProcessor->noMoreTasksAreComing(); } } } Worker*worker=NULL; bool aWorkerWorked=m_virtualProcessor->run(); if(aWorkerWorked){ worker=m_virtualProcessor->getCurrentWorker(); } if(worker!=NULL && worker->isDone()){ #ifdef DEBUG_TASK_CREATOR cout<<"Current worker is done"<<endl; #endif processWorkerResult(worker); destroyWorker(worker); m_completedJobs++; } if(!hasUnassignedTask() && !m_virtualProcessor->hasWorkToDo()){ finalizeMethod(); m_virtualProcessor->printStatistics(); m_virtualProcessor->reset(); #ifdef DEBUG_TASK_CREATOR cout<<"calling finalizeMethod()"<<endl; #endif } }