#include <task_manager.h>
Inheritance diagram for NLMISC::CTaskManager:

Nevrax France
Definition at line 55 of file task_manager.h.
Public Member Functions | |
| void | addTask (IRunnable *, float priority=0) |
| Add a task to TaskManager and its priority. | |
| CTaskManager () | |
| Constructor. | |
| bool | deleteTask (IRunnable *r) |
| Delete a task, only if task is not running, return true if found and deleted. | |
| void | dump (std::vector< std::string > &result) |
| Dump task list. | |
| virtual void | getName (std::string &result) const |
| uint | getNumWaitingTasks () |
| Get number of waiting task. | |
| bool | isTaskRunning () const |
| Is there a current task ? | |
| bool | isThreadRunning () const |
| return false if exit() is required. task added with addTask() should test this flag. | |
| void | registerTaskPriorityCallback (IChangeTaskPriority *callback) |
| Register task priority callback. | |
| void | run (void) |
| Manage TaskQueue. | |
| void | sleepTask (void) |
| Sleep a Task. | |
| uint | taskListSize (void) |
| Task list size. | |
| ~CTaskManager () | |
| Destructeur. | |
Protected Member Functions | |
| void | waitCurrentTaskToComplete () |
Protected Attributes | |
| CSynchronized< std::list< std::string > > | _DoneTaskQueue |
| CSynchronized< std::string > | _RunningTask |
| queue of tasks, using list container instead of queue for DeleteTask methode | |
| CSynchronized< std::list< CWaitingTask > > | _TaskQueue |
| IThread * | _Thread |
| thread pointer | |
| volatile bool | _ThreadRunning |
| flag indicate thread loop, if false cause thread exit | |
Private Member Functions | |
| void | changeTaskPriority () |
| Register task priority callback. | |
Private Attributes | |
| IChangeTaskPriority * | _ChangePriorityCallback |
| The callback. | |
| volatile bool | _IsTaskRunning |
|
|
Constructor.
Definition at line 39 of file task_manager.cpp. References _ChangePriorityCallback, _IsTaskRunning, _RunningTask, _Thread, _ThreadRunning, and NLMISC::IThread::start().
00039 : _RunningTask (""), _TaskQueue (""), _DoneTaskQueue ("") 00040 { 00041 _IsTaskRunning = false; 00042 _ThreadRunning = true; 00043 CSynchronized<string>::CAccessor currentTask(&_RunningTask); 00044 currentTask.value () = ""; 00045 _Thread = IThread::create(this); 00046 _Thread->start(); 00047 _ChangePriorityCallback = NULL; 00048 } |
|
|
Destructeur.
Definition at line 53 of file task_manager.cpp. References _ThreadRunning, and NLMISC::nlSleep().
00054 {
00055 _ThreadRunning = false;
00056 while(!_ThreadRunning)
00057 nlSleep(10);
00058 }
|
|
||||||||||||
|
Add a task to TaskManager and its priority.
Definition at line 126 of file task_manager.cpp. References _TaskQueue, and r. Referenced by NLMISC::CAsyncFileManager::addLoadTask(), NL3D::CZoneManager::checkZonesAround(), NLMISC::CAsyncFileManager::loadFile(), NLMISC::CAsyncFileManager::loadFiles(), and NLMISC::CAsyncFileManager::signal().
00127 {
00128 CSynchronized<std::list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00129 acces.value().push_back(CWaitingTask(r, priority));
00130 }
|
|
|
Register task priority callback.
Definition at line 216 of file task_manager.cpp. References _ChangePriorityCallback, _TaskQueue, and NLMISC::CTaskManager::IChangeTaskPriority::getTaskPriority(). Referenced by run().
00217 {
00218 if (_ChangePriorityCallback)
00219 {
00220 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00221 list<CWaitingTask> &taskList = acces.value();
00222
00223 list<CWaitingTask>::iterator ite = taskList.begin();
00224 while(ite != taskList.end())
00225 {
00226 // Get the new priority
00227 ite->Priority = _ChangePriorityCallback->getTaskPriority(*(ite->Task));
00228
00229 // Next task
00230 ite++;
00231 }
00232 }
00233 }
|
|
|
Delete a task, only if task is not running, return true if found and deleted.
Definition at line 133 of file task_manager.cpp. References _TaskQueue, and r.
00134 {
00135 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00136 for(list<CWaitingTask>::iterator it = acces.value().begin(); it != acces.value().end(); it++)
00137 {
00138 if(it->Task == r)
00139 {
00140 acces.value().erase(it);
00141 return true;
00142 }
00143 }
00144 return false;
00145 }
|
|
|
Dump task list.
Definition at line 163 of file task_manager.cpp. References _DoneTaskQueue, _RunningTask, _TaskQueue, and NLMISC::toString().
00164 {
00165 CSynchronized<string>::CAccessor accesCurrent(&_RunningTask);
00166 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00167 CSynchronized<list<string> >::CAccessor accesDone(&_DoneTaskQueue);
00168
00169 const list<CWaitingTask> &taskList = acces.value();
00170 const list<string> &taskDone = accesDone.value();
00171 const string &taskCurrent = accesCurrent.value();
00172
00173 // Resize the destination array
00174 result.clear ();
00175 result.reserve (taskList.size () + taskDone.size () + 1);
00176
00177 // Add the waiting strings
00178 list<string>::const_reverse_iterator iteDone = taskDone.rbegin ();
00179 while (iteDone != taskDone.rend ())
00180 {
00181 result.push_back ("Done : " + *iteDone);
00182
00183 // Next task
00184 iteDone++;
00185 }
00186
00187 // Add the current string
00188 if (!taskCurrent.empty())
00189 {
00190 result.push_back ("Current : " + taskCurrent);
00191 }
00192
00193 // Add the waiting strings
00194 list<CWaitingTask>::const_iterator ite = taskList.begin ();
00195 while (ite != taskList.end ())
00196 {
00197 string name;
00198 ite->Task->getName (name);
00199 result.push_back ("Waiting : " + name + " " + toString(ite->Priority));
00200
00201 // Next task
00202 ite++;
00203 }
00204 }
|
|
|
Reimplemented in NL3D::CAsyncFileManager3D::CMeshLoad, NL3D::CAsyncFileManager3D::CIGLoad, NL3D::CAsyncFileManager3D::CIGLoadUser, NL3D::CAsyncFileManager3D::CTextureLoad, NL3D::CZoneLoadingTask, NLPACS::CGlobalRetriever::CLrLoader, NLMISC::CAsyncFileManager::CFileLoad, NLMISC::CAsyncFileManager::CMultipleFileLoad, and NLMISC::CAsyncFileManager::CSignal. Definition at line 74 of file thread.h. Referenced by run().
00075 {
00076 result = "NoName";
00077 }
|
|
|
Get number of waiting task.
Definition at line 208 of file task_manager.cpp. References _TaskQueue, and uint.
00209 {
00210 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00211 return acces.value().size();
00212 }
|
|
|
Is there a current task ?
Definition at line 90 of file task_manager.h. References _IsTaskRunning.
00090 {return _IsTaskRunning;}
|
|
|
return false if exit() is required. task added with addTask() should test this flag.
Definition at line 81 of file task_manager.h. References _ThreadRunning.
00081 {return _ThreadRunning;}
|
|
|
Register task priority callback.
Definition at line 237 of file task_manager.cpp. References _ChangePriorityCallback.
00238 {
00239 _ChangePriorityCallback = callback;
00240 }
|
|
|
Manage TaskQueue.
Implements NLMISC::IRunnable. Definition at line 61 of file task_manager.cpp. References _DoneTaskQueue, _IsTaskRunning, _RunningTask, _TaskQueue, _ThreadRunning, changeTaskPriority(), NLMISC::IRunnable::getName(), NLMISC_DONE_TASK_SIZE, NLMISC::IRunnable::run(), sleepTask(), and NLMISC::toString().
00062 {
00063 IRunnable *runnableTask;
00064 float priorityTask;
00065 while(_ThreadRunning)
00066 {
00067 {
00068 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00069 if(acces.value().empty())
00070 {
00071 runnableTask = NULL;
00072 }
00073 else
00074 {
00075 // Update task priorities
00076 changeTaskPriority ();
00077
00078 // Get the best task
00079 list<CWaitingTask> &taskList = acces.value();
00080 list<CWaitingTask>::iterator ite = taskList.begin();
00081 list<CWaitingTask>::iterator bestIte = ite;
00082 while (ite != taskList.end())
00083 {
00084 if (ite->Priority < bestIte->Priority)
00085 bestIte = ite;
00086
00087 // Next task;
00088 ite++;
00089 }
00090
00091 _IsTaskRunning = true;
00092 runnableTask = bestIte->Task;
00093 priorityTask = bestIte->Priority;
00094 taskList.erase (bestIte);
00095 }
00096 }
00097 if(runnableTask)
00098 {
00099 {
00100 CSynchronized<string>::CAccessor currentTask(&_RunningTask);
00101 string temp;
00102 runnableTask->getName(temp);
00103 currentTask.value () = temp + " " + toString (priorityTask);
00104 }
00105 runnableTask->run();
00106 {
00107 CSynchronized<string>::CAccessor currentTask(&_RunningTask);
00108 CSynchronized<list<string> >::CAccessor doneTask(&_DoneTaskQueue);
00109 doneTask.value().push_front (currentTask.value ());
00110 currentTask.value () = "";
00111 if (doneTask.value().size () > NLMISC_DONE_TASK_SIZE)
00112 doneTask.value().resize (NLMISC_DONE_TASK_SIZE);
00113 }
00114
00115 _IsTaskRunning = false;
00116 }
00117 else
00118 {
00119 sleepTask();
00120 }
00121 }
00122 _ThreadRunning = true;
00123 }
|
|
|
Sleep a Task.
Definition at line 75 of file task_manager.h. References NLMISC::nlSleep(). Referenced by run(), and waitCurrentTaskToComplete().
00075 { nlSleep(10); }
|
|
|
Task list size.
Definition at line 148 of file task_manager.cpp. References _TaskQueue, and uint.
00149 {
00150 CSynchronized<list<CWaitingTask> >::CAccessor acces(&_TaskQueue);
00151 return acces.value().size();
00152 }
|
|
|
If any, wait the current running task to complete this function MUST be called in a 'accessor to the _TaskQueue' statement because a mutex is required eg: { CSynchronized<list<IRunnable *> >::CAccessor acces(&_TaskQueue); waitCurrentTaskToComplete(); } Definition at line 155 of file task_manager.cpp. References _IsTaskRunning, and sleepTask(). Referenced by NLMISC::CAsyncFileManager::cancelLoadTask().
00156 {
00157 while (_IsTaskRunning)
00158 sleepTask();
00159 }
|
|
|
The callback.
Definition at line 108 of file task_manager.h. Referenced by changeTaskPriority(), CTaskManager(), and registerTaskPriorityCallback(). |
|
|
Definition at line 148 of file task_manager.h. |
|
|
Definition at line 158 of file task_manager.h. Referenced by CTaskManager(), isTaskRunning(), run(), and waitCurrentTaskToComplete(). |
|
|
queue of tasks, using list container instead of queue for DeleteTask methode
Definition at line 146 of file task_manager.h. Referenced by CTaskManager(), dump(), and run(). |
|
|
Definition at line 147 of file task_manager.h. Referenced by addTask(), changeTaskPriority(), deleteTask(), dump(), getNumWaitingTasks(), run(), and taskListSize(). |
|
|
thread pointer
Definition at line 151 of file task_manager.h. Referenced by CTaskManager(). |
|
|
flag indicate thread loop, if false cause thread exit
Definition at line 154 of file task_manager.h. Referenced by CTaskManager(), isThreadRunning(), run(), and ~CTaskManager(). |
1.3.6