1 // Kernel.cpp: implementation of the CKernel class.
\r
3 //////////////////////////////////////////////////////////////////////
\r
8 //////////////////////////////////////////////////////////////////////
\r
9 // Construction/Destruction
\r
10 //////////////////////////////////////////////////////////////////////
\r
26 int CKernel::Execute()
\r
31 while(taskList.size())
\r
34 PROFILE("Kernel task loop");
\r
36 //DWORD starting_point = GetTickCount();
\r
38 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
\r
40 TranslateMessage(&msg);
\r
41 DispatchMessage(&msg);
\r
45 std::list< CMMPointer<ITask> >::iterator it, thisIt;
\r
46 for(it=taskList.begin();it!=taskList.end();)
\r
50 if(!t->canKill)t->Update();
\r
52 //loop again to remove dead tasks
\r
53 for(it=taskList.begin();it!=taskList.end();)
\r
60 // 25-07-03 - updated this to use erase() rather than remove()
\r
61 taskList.erase(thisIt);
\r
65 IMMObject::CollectGarbage();
\r
66 //DWORD end_point = GetTickCount();
\r
67 // Sleep(50 - (end_point-starting_point));
\r
70 CProfileSample::Output();
\r
78 bool CKernel::AddTask(CMMPointer<ITask> t)
\r
80 if(!t->Start())return false;
\r
82 //keep the order of priorities straight
\r
83 std::list< CMMPointer<ITask> >::iterator it;
\r
84 for(it=taskList.begin();it!=taskList.end();it++)
\r
86 CMMPointer<ITask> &comp=(*it);
\r
87 if(comp->priority>t->priority)break;
\r
89 taskList.insert(it,t);
\r
93 void CKernel::SuspendTask(CMMPointer<ITask> t)
\r
95 //check that this task is in our list - we don't want to suspend a task that isn't running
\r
96 if(std::find(taskList.begin(),taskList.end(),t)!=taskList.end())
\r
100 pausedTaskList.push_back(t);
\r
104 void CKernel::ResumeTask(CMMPointer<ITask> t)
\r
106 if(std::find(pausedTaskList.begin(),pausedTaskList.end(),t)!=pausedTaskList.end())
\r
109 pausedTaskList.remove(t);
\r
110 //keep the order of priorities straight
\r
111 std::list< CMMPointer<ITask> >::iterator it;
\r
112 for(it=taskList.begin();it!=taskList.end();it++)
\r
114 CMMPointer<ITask> &comp=(*it);
\r
115 if(comp->priority>t->priority)break;
\r
117 taskList.insert(it,t);
\r
121 void CKernel::RemoveTask(CMMPointer<ITask> t)
\r
123 if(std::find(taskList.begin(),taskList.end(),t)!=taskList.end())
\r
129 void CKernel::KillAllTasks()
\r
131 for(std::list< CMMPointer<ITask> >::iterator it=taskList.begin();it!=taskList.end();it++)
\r
133 (*it)->canKill=true;
\r