eng_task.hh

Go to the documentation of this file.
00001 /*
00008  * LEGAL:   COPYRIGHT (C) 2007 JIM E. BROOKS
00009  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00010  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00011  *****************************************************************************/
00012 
00013 #ifndef ENG_TASK_HH
00014 #define ENG_TASK_HH 1
00015 
00016 namespace eng {
00017 
00026 class Task : public Threadable
00027 {
00028 
00029 friend class Engine;
00030 
00031 public:
00038     class TaskFunctor : public Shared
00039     {
00040     
00041     public:
00042                         TaskFunctor( void ) { }
00043         virtual         ~TaskFunctor() { }
00044         virtual void    operator()( void ) = 0;
00045     };
00046 
00047 private:
00049     class IdleFunctor : public Event<>::ListenerFunctor
00050     {
00051     public:
00052         void operator()( Void nothing );
00053     };
00054     friend class IdleFunctor;
00055 
00056 private:
00057     Task( void );  // Singleton
00058     ~Task();
00059 
00060 public:
00061     CLASS_METHOD Task&  GetInstance( void );
00062     CLASS_METHOD void   Schedule( SharedPtr<TaskFunctor> task );
00063     CLASS_METHOD void   RunTasks( void );
00064 
00065 private:
00066     typedef deque<SharedPtr<TaskFunctor> > TaskContainer;
00067     CLASS_VAR Task*             msInstance;
00068     CLASS_VAR SlowLock          msLock;
00069     CLASS_VAR TaskContainer     msTasks;
00070     CLASS_VAR Thread::Condition msCondition;
00071 };
00072 
00073 } // namespace eng
00074 
00075 #endif // ENG_TASK_HH
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:09 2007