Esempio n. 1
0
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;       //из расчета кол-ва тиков выполняемой функции и частоты прерывания таймера
   }
}
Esempio n. 2
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);
}
Esempio n. 3
0
/*......................................................................*/
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;
					}
		}
Esempio n. 4
0
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();
}
Esempio n. 6
0
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);
    }
}
Esempio n. 7
0
/*......................................................................*/
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);
		}
Esempio n. 8
0
/*------------------------------------------------------*/
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);
						}
					}
			}
Esempio n. 9
0
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;
}
Esempio n. 10
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;
 }
Esempio n. 11
0
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
}
Esempio n. 13
0
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;       //из расчета кол-ва тиков выполняемой функции и частоты прерывания таймера
   }
}
Esempio n. 14
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();
			}
		}
Esempio n. 15
0
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);

	
}
Esempio n. 16
0
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;
    }
}
Esempio n. 17
0
/*------------------------------------------------------*/
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;
				}
			}
Esempio n. 18
0
CCommonData::~CCommonData(){
	DeleteTask();
	delete[] m_Buf;
}
Esempio n. 19
0
/*......................................................................*/
void	JwDrop(void)
		{
		JwCount=0;
		DeleteTask(JwDrop,PIT_task);
		}