void DispatchTask (void){ uint8_t n=0; if (flags.RunFlag==1){ // если таймер выставил флаг task tmp; // переменная для хранения нулевого элемента tmp=TaskArray[0]; while (((TaskArray[n].pfunc != 0) || (TaskArray[n].countdown!=0)) && (n < MAXnTASKS)){ n++; //мотаем пока счетчик не дойдет до задачи с нужной задержкой TaskArray[n-1]=TaskArray[n]; //сдвигаем очередь вперед if (TaskArray[n-1].countdown) TaskArray[n-1].countdown-=dt; //вычитаем прошедшее время из каждой задачи } DeleteTask(n); //удаляем последнюю задачу switch (tmp.numRun){ case 0: if (*tmp.nextfunc!=Idle) AddTask(*tmp.nextfunc,Idle,tmp.nextdelay,0,tmp.numRun);break; case 0xffff: AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.delay,tmp.nextdelay,tmp.numRun);break; default: if (tmp.numRun&&tmp.numRun!=0xffff) AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.delay,tmp.nextdelay,--tmp.numRun);break; } if (TaskArray[0].countdown!=0) {delay_time=TaskArray[0].countdown;} // если здесь +1 , то немного работает )))) else {delay_time=1;} //можно флаг запуска добавить сюда , но в очереди будет нечего убавлять и ф-ию зациклит dt=delay_time; //или воткнуть туда значение уменьшения , только его нужно брать для точности (*tmp.pfunc)(); flags.RunFlag=0; //из расчета кол-ва тиков выполняемой функции и частоты прерывания таймера } }
void CXTaskDlg::CheckForUpdate() { CXsvrDlg *pDlg = (CXsvrDlg*)AfxGetMainWnd(); CTime today; today = CTime::GetCurrentTime(); CString strNow = today.Format(_T("%Y-%m-%d %H:%M:%S")); char *buf = (LPSTR)(LPCTSTR)strNow; XTask task; task.SetDate(buf); task.SetTime(buf); list<XTask*>::iterator iLast = m_listTask.end(); for (list<XTask*>::iterator iTask = m_listTask.begin(); iTask != iLast;) { // 是时候执行任务了。 if ( (task.nDate > (*iTask)->nDate) | ((task.nDate == (*iTask)->nDate)&&task.nTime >= (*iTask)->nTime)) { // 日期已过 pDlg->AddErrorInfo((*iTask)->szContent); XTask *p = (*iTask); m_listTask.remove(*iTask++); SendTask(p->nID, p->szContent); DeleteTask(p->nID); if (p->nFrequency == 0) { CTime timeTomorrow(today.GetYear(), today.GetMonth(), today.GetDay()+1, today.GetHour(), today.GetMinute(), today.GetSecond()); CString strTomorrow = timeTomorrow.Format(_T("%Y-%m-%d %H:%M:%S")); AddNewTask(strTomorrow, p->szContent, 0); pDlg->AddErrorInfo(strTomorrow); } else { DeleteReceiver(p->nID); } delete p; } else { ++ iTask; } } // 任务完成后,重新启动计时器 SetTimer(TIMER_SCAN_DATABASE, TIMER_SCAN_DATABASE_TEIM, NULL); }
/*......................................................................*/ void JwRec(void) { static ack_flag; int j; if(Kbhit(CHAUX)) if(CheckTask(JwSend,PIT_task)) switch(j=Getch(CHAUX)) { case ACK_COM: ack_flag = ACK_COM; break; case NACK_COM: JwSend(); break; default: if((ack_flag == ACK_COM) && (j == JwTx[0])) DeleteTask(JwSend,PIT_task); ack_flag = 0; break; } else switch(JwCount) { case 0: JwCount=JwCheck=Getch(CHAUX); if(JwCount > 16) JwCount=0; else{ JwCount++; Jw=JwRx; SetTask(JwDrop,50,PIT_task); } break; case 1: if(JwExe()) { Putch(ACK_COM,CHAUX); Putch(JwRx[0],CHAUX); } else Putch(NACK_COM,CHAUX); JwCount--; DeleteTask(JwDrop,PIT_task); break; default: *Jw = Getch(CHAUX); JwCheck += *Jw++; JwCount--; break; } }
void TaskController::taskComplete(TaskInfo* pInfo) { int nextTaskId=pInfo->m_taskDetail.m_nextTask; std::vector<TaskDetail*>::iterator it=allTask.begin(); bool hasnextTask=false; for (; it!=allTask.end(); it++) { if (nextTaskId==(*it)->m_taskId) { TaskInfo nextTask; nextTask.leftTime=0; nextTask.questID=nextTaskId; nextTask.status=QUEST_STATUS_AVAILABLE; nextTask.m_taskDetail=*(*it); m_taskDic.insert(std::map<int,TaskInfo>::value_type(nextTaskId,nextTask)); hasnextTask=true; break; } } if (hasnextTask) { tNpcEntity* npcAEntity = SceneController::getInstance().getSceneManager()->getNpcEntity(pInfo->m_taskDetail.m_completeNPC); DeleteTask(pInfo->questID); if (npcAEntity) { npcAEntity->view->updateTaskStatus(QUEST_STATUS_AVAILABLE); } } else { tNpcEntity* npcAEntity = SceneController::getInstance().getSceneManager()->getNpcEntity(pInfo->m_taskDetail.m_completeNPC); DeleteTask(pInfo->questID); if (npcAEntity) { npcAEntity->view->updateTaskStatus(-100); } } }
void BFProject::DeleteTasks (BFTaskVector& vecTasks) { BFTaskVectorIt it; for (it = vecTasks.begin(); it != vecTasks.end(); ++it) { // delete the task but don't broadcast the observers DeleteTask((*it)->GetOID(), false); } broadcastObservers(); }
static void deleteCycleTask(struct Task *task) { if(task != NULL) { /* Signal the cycle task to stop */ viewerDisplay.cycleTaskMustStop = TRUE; /* Wait for task to terminate */ if(!viewerDisplay.cycleTaskTerminated) Delay(10); /* Delete the task */ DeleteTask(task); } }
/*......................................................................*/ void JwSend(void) { static int n; int i,j; if(!CheckTask(JwSend,PIT_task)) { n=0; SetTask(JwSend,100,PIT_task); } for(i=j=0; i<=JwTx[0]; ++i) j += Putch(JwTx[i],CHAUX); Putch(j,CHAUX); if(++n >= 5) DeleteTask(JwSend,PIT_task); }
/*------------------------------------------------------*/ void Submit(void) { static int i; if(!shutdown_load(NULL)) if(readRTC(0) || readRTC(1) || readRTC(2)) { if(!CheckTask(Submit,RTC_task)) { SetTask(Submit,1,RTC_task); i=3; } else{ Ungetch(readRTC(i),10); if(++i > 7) DeleteTask(Submit,RTC_task); } } }
int camino_ns_main(int argc, char **argv) { bool cursor; unsigned c; ncars = 0; pass_max = argc > 1 ? atoi(argv[1]): PASS_MAX; mt_cons_clear(); cursor = mt_cons_cursor(false); init_road(); Ready(ctl = CreateTask(control, 0, NULL, "control", DEFAULT_PRIO)); mprint(OFFSET, MSGLINE, "I: auto hacia la izquierda"); mprint(OFFSET, MSGLINE+1, "D: auto hacia la derecha"); mprint(OFFSET, MSGLINE+2, "S: salir"); do switch ( c = mgetch() ) { case 'I': case 'i': send_car(LEFTBOUND); break; case 'D': case 'd': send_car(RIGHTBOUND); break; default: break; } while ( c != 's' && c != 'S' ); mprint(OFFSET, MSGLINE + 3, "Esperando que terminen los autos..."); while ( ncars ) Yield(); DeleteTask(ctl); mt_cons_clear(); mt_cons_cursor(cursor); return 0; }
int DeleteList(struct _task_list_type * list){ if (!list) return 0; task_entry * current = list->head; task_entry * next; // iterate through the list of tasks, deactivate each one while (current){ next = current->next; DeleteTask(current); current = next; } free (list); list = NULL; return 1; }
void TaskListPanel::OnAction(int id) { switch (id) { case LOAD: LoadTask(); break; case RENAME: RenameTask(); break; case DELETE: DeleteTask(); break; case MORE: OnMoreClicked(); break; } }
// **************************************************************************** // *** command - SubmitTask // **************************************************************************** void khResourceManager::SubmitTask(const SubmitTaskMsg &msg) { assert(!mutex.trylock()); // just in case another task has already been // submitted for this verref DeleteTask(msg.verref); notify(NFY_DEBUG, "SubmitTask %s", msg.verref.c_str()); if (!khTask::NewTask(msg)) { time_t now = time(0); TaskDoneMsg doneMsg(msg.verref, msg.taskid, false, now /* beginTime */, now /* endTime */); NotifyTaskDone(doneMsg); } #if 0 DumpWaitQueue(); #endif }
void DispatchTask (void){ uint8_t n=0; if (flags.RunFlag==1){ // если таймер выставил флаг task tmp; // переменная для хранения нулевого элемента tmp=TaskArray[0]; while (((TaskArray[n].pfunc != 0) || (TaskArray[n].countdown!=0)) && (n < MAXnTASKS)){ n++; //мотаем пока счетчик не дойдет до задачи с нужной задержкой TaskArray[n-1]=TaskArray[n]; //сдвигаем очередь вперед if (TaskArray[n-1].countdown) TaskArray[n-1].countdown-=dt; //вычитаем прошедшее время из каждой задачи } DeleteTask(n); //удаляем последнюю задачу // добавление задачи // 1. Добавление одиночной задачи task delay // 2. Добавление количества запусков одиночной задачи numRun // 3. Добавление периодической задачи task period // если намран равен 0 , то это одиночная задача , если след. ф-ия идл , то не ставить в очередь. // если намран макс , то это зацикленная задача // если другое значение , то значит это количество запусков , уменьшаем его с каждой вставкой // косяк скорее всего с тем , что нельзя будет поменять количество запусков или задержку // только через функцию посредник switch (tmp.numRun){ case 0: if (*tmp.nextfunc!=Idle) AddTask(*tmp.nextfunc,Idle,tmp.nextdelay,0,tmp.numRun);break; case 0xffff: AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.delay,tmp.nextdelay,tmp.numRun);break; default: if (tmp.numRun&&tmp.numRun!=0xffff) AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.delay,tmp.nextdelay,--tmp.numRun);break; } // if (tmp.period==0&&tmp.numRun==0) {AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.delay,tmp.period,tmp.numRun);} // if (tmp.period&&tmp.numRun==0) {AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.period,tmp.period,tmp.numRun);} // if (tmp.period&&tmp.numRun!=0) {AddTask(*tmp.pfunc,*tmp.nextfunc,tmp.period,tmp.period,--tmp.numRun);} // else AddTask(*tmp.pfunc,tmp.period,tmp.period); //TODO:разобраться с задержками запуска функций, трабла с нулевым значением, временные интервалы не точны if (TaskArray[0].countdown!=0) {delay_time=TaskArray[0].countdown;} // если здесь +1 , то немного работает )))) else {delay_time=1;} //можно флаг запуска добавить сюда , но в очереди будет нечего убавлять и ф-ию зациклит dt=delay_time; //или воткнуть туда значение уменьшения , только его нужно брать для точности (*tmp.pfunc)(); flags.RunFlag=0; //из расчета кол-ва тиков выполняемой функции и частоты прерывания таймера } }
/*......................................................................*/ void AdsData(void) { uint i; if(aux_mode != AUX_JW) return; if(JwCount || CheckTask(JwSend,PIT_task)) SetTask(AdsData,1,RTC_task); else{ DeleteTask(AdsData,RTC_task); Jw = JwTx; *Jw++=7; *Jw++=ADS_DATA; i=JwAZ; *Jw++=i / 256; *Jw++=i % 256; i=JwR; *Jw++=i / 256; *Jw++=i % 256; i=JwEL; *Jw++=i / 256; *Jw++=i % 256; JwSend(); } }
VSCPanelTaskItem::VSCPanelTaskItem(VTaskItem * pTask, QWidget *parent, Qt::WindowFlags flags) : m_pTask(pTask), QWidget(parent, flags) { ui.setupUi(this); //connect(ui.pbSetting, SIGNAL(clicked()), this, SIGNAL(Setting())); //connect(ui.pbAlarm, SIGNAL(clicked()), this, SIGNAL(AddEvent())); if (m_pTask) ui.TaskName->setText(m_pTask->GetTaskName().c_str()); m_movie = new QMovie(":/action/resources/processing.gif"); ui.lbProcess->setScaledContents(true); ui.lbProcess->setMovie(m_movie); m_movie->start(); UpdateProcess(); m_Timer = new QTimer(this); connect(m_Timer, SIGNAL(timeout()), this, SLOT(UpdateProcess())); connect(ui.pbDelete, SIGNAL(clicked()), this, SLOT(DeleteTask())); m_Timer->start(5000); }
void wxGISTaskManager::OnGisNetEvent(wxGISNetEvent& event) { wxNetMessage msg = event.GetNetMessage(); wxString sErrMsg; switch(msg.GetCommand()) { case enumGISNetCmdBye: //server disconnected DeleteAllTasks(); //start task manager server StartTaskManagerServer(); //start timer to connect task server m_timer.Start(5000, false); break; case enumGISNetCmdHello: { wxNetMessage msg(enumGISNetCmdCmd, enumGISCmdGetChildren, enumGISPriorityHigh); m_pConn->SendNetMessage(msg); //QuereTasks(sErrMsg); } break; case enumGISNetCmdNote: //if message id != -1 add to notify if(msg.GetId() != wxNOT_FOUND) { TSKMNGR_RESULT Res = {msg.GetId(), msg.GetMessage(), msg.GetState()}; PushResult(Res); } else { switch(msg.GetState()) { case enumGISNetCmdStOk: wxLogMessage(msg.GetMessage()); break; case enumGISNetCmdStErr: wxLogError(msg.GetMessage()); break; //case enumGISCmdNoteVol: // UpdateVolume(msg.GetXMLRoot()->GetChildren()); // break; //case enumGISCmdNotePercent: // UpdatePercent(msg.GetXMLRoot()->GetChildren()); // break; case enumGISCmdNoteMsg: AddMessage(msg.GetXMLRoot()->GetChildren()); break; default: wxLogVerbose(msg.GetMessage()); break; } } break; case enumGISNetCmdCmd: //do something usefull if(msg.GetId() != wxNOT_FOUND) { TSKMNGR_RESULT Res = {msg.GetId(), msg.GetMessage(), msg.GetState()}; PushResult(Res); } if(msg.GetXMLRoot()) { switch(msg.GetState()) { case enumGISCmdStAdd: AddTask(msg.GetXMLRoot()->GetChildren()); break; case enumGISCmdStDel: DeleteTask(msg.GetXMLRoot()->GetChildren()); break; case enumGISCmdStStart: case enumGISCmdStStop: case enumGISCmdStChng: ChangeTask(msg.GetXMLRoot()->GetChildren()); break; case enumGISCmdGetChildren: LoadTasks(msg.GetXMLRoot()->GetChildren()); break; case enumGISCmdStPriority://TODO: change priority for all task simultaniasly default: break; } } break; default: break; } }
/*------------------------------------------------------*/ void LoadFromPc(char *p) { void InProg(void); int ReadPar(char *); char q[LINK_LEN],*r,*s,*ss[16]; int i,j,k; long y,z; lib *l; command *c,**cp; switch(*p) { case 'd': Lr=scanLLA(Lr,++p,null); if(!Lr) { j=0; switch(strscan(p,ss,',',16)) { case 2: j=atoi(ss[1]); case 1: if(l=FindLib(LinkAddrStr(ss[0]))) { copylib(l,Lr=makelib()); if(j) for(Lr->xc=Lr->x; --j && Lr->xc->next;) Lr->xc=Lr->xc->next; else Lr->x=Lr->xc=freecoord(Lr->x); Ungetch(REFRESH,0); } else puts_pc("!NOT_FOUND\r\n"); break; default: puts_pc("!SYNTAX\r\n"); break; } } break; case 'l': if(i=LinkAddrStr(++p)) { freelib(Lc); Lc=makelib(); Lc->ltype=LinkAddrType(i); Lc->n=LinkAddrN(i); } else InsertLib(&Lc); break; case 'M': if(sscanf(++p," %d,%04X,%04X,%s",&k,&i,&j,q)==4) { if(Mscan) /* znak, da je editor odprt ! */ if(Mscan->c->maxopt) { /* vrstica in obseg aktivna ? */ if(k) if(--k <= Mscan->c->maxopt) { Mscan->active = k; Refresh(); } break; } r=strchr(q,','); *r++=0; cp=NULL; if(!strcmp(q,"message")) cp=&CP; if(!strcmp(q,"gun")) cp=&GUN; if(!strcmp(q,"meteo")) cp=&METEO; if(!cp) break; /*......................................................................................*/ if(!*cp) new_command(cp); else{ c=*cp; do if(c->chk == j) *cp=c; else c=c->next; while(c != *cp); if((*cp)->chk != j) new_command(cp); } (*cp)->chk=j; c=*cp; s=(char *)c; i = sizeof(command) - sizeof(command *) - sizeof(int); while(i--) { sscanf(r,"%02X",&j); *s++ = j; ++r;++r; } c->chk *= -1; if(cp == &CP) Ungetch(GXM_MESSAGE_ID,0); if(cp == &GUN) Ungetch(GXM_GUN_ID,0); } break; case 'r': if(crest && (sscanf(++p," %ld %ld",&y,&z) == 2)) { add_coord(crest,0,y,z); crest->xc->refp=null; } else DeleteTask(DMRtimeout,RTC_task); break; case 'c': i=j=0; if(Lc) Lc=scanLLA(Lc,++p,eof); break; case 'g': if(Lc && (sscanf(++p," %s %d %d",q,&j,&k) == 3)) { for(i=0; Guns[i].name; ++i) if(!strcmp(Guns[i].name,q)) { Lc->gun=i; Lc->refd=j; Lc->powder=k; } } break; case 'a': if(Lc && (sscanf(++p,"%s %d",q,&j) == 2)) { for(i=0; Guns[Lc->gun].ammo[i]; ++i) if(!strcmp(Guns[Lc->gun].ammo[i],q)) { Lc->ammpcs[i]=j; r=strchr(p,'+'); s=strrchr(p,'+'); if(r) do Lc->ammpcs[i] += 0x1000; while(r++ != s); r=strchr(p,'-'); s=strrchr(p,'-'); if(r) do Lc->ammpcs[i] -= 0x1000; while(r++ != s); } } break; case 'p': if(sscanf(++p,"%d,%d",&i,&j) == 2) if(i<12 && j<4) { xyLCD(i,j); Ungetch(GXM_CURSOR_POS,0); } break; case 'm': LoadHexRec(p,'m',_MenuCode); break; case 'h': LoadHexRec(p,'h',_MenuHead); break; case 't': if(Lc) { ++p; ++p; Lc->txt=addtxt(Lc,p); } else LoadHexRec(p,'t',_TextCode); break; case 'T': if(sscanf(++p," %x %x",&i,&j)==2) { sprintf(q,"%04X\r\n",readTEMP(i,j)); puts_pc(q); } break; case 'f': if(ReadPar(++p)) break; i=strscan(p,ss,' ',16); if(i>=2) { sscanf(ss[0],"%lx",&eebott); sscanf(ss[1],"%lx",&eetop); if(eebott < (long)FLASHTOP) { puts_pc("!ILL_ADDRESS\r\n"); break; } if(eetop > (long)FLASHTOP+0x80000L) { puts_pc("!ILL_ADDRESS\r\n"); break; } if(i==3) { ss[2][8]=0; sprintf(pass,"%-8s",ss[2]); } if(CheckPass(&syspass)) { puts_pc("!NOT_ALLOWED\r\n"); break; } puts_pc("\7\r\nFLASH programming !!!\r\n"); wait(50); InProg(); puts_pc("Done\r\n"); } else puts_pc("!SYNTAX\r\n"); break; case 'b': k=sscanf(++p," %d %d",&i,&j); if(k) if(Baud(CHPC,i)) { if(k==2) Xonoff(j); break; } puts_pc("!SYNTAX\r\n"); break; case 'z': EnterZone(++p); break; case 'G': DeleteTask(ReadPc,RTC_task); Guns=ReadGunData(0,0,0,0,NULL); SetTask(ReadPc,0,RTC_task); break; default: puts_pc("!SYNTAX\r\n"); break; } }
CCommonData::~CCommonData(){ DeleteTask(); delete[] m_Buf; }
/*......................................................................*/ void JwDrop(void) { JwCount=0; DeleteTask(JwDrop,PIT_task); }