1// TaskManager.h
2
3#ifndef NET_FS_TASK_MANAGER_H
4#define NET_FS_TASK_MANAGER_H
5
6#include <OS.h>
7
8#include <HashString.h>
9#include <util/DoublyLinkedList.h>
10
11// Task
12class Task : public DoublyLinkedListLinkImpl<Task> {
13public:
14								Task(const char* name);
15	virtual						~Task();
16
17			status_t			Run();
18			void				Terminate();
19
20			bool				IsDone() const;
21
22	virtual	status_t			Execute() = 0;
23	virtual	void				Stop();
24
25protected:
26			void				SetDone(bool done);
27
28private:
29	static	int32				_ThreadEntry(void* data);
30			int32				_Thread();
31
32private:
33			HashString			fName;
34			thread_id			fThread;
35			bool				fTerminating;
36			bool				fDone;
37};
38
39// TaskManager
40class TaskManager {
41public:
42								TaskManager();
43								~TaskManager();
44
45			status_t			RunTask(Task* task);
46			void				RemoveDoneTasks();
47			void				TerminateAllTasks();
48
49private:
50			DoublyLinkedList<Task> fTasks;
51};
52
53#endif	// NET_FS_TASK_MANAGER_H
54