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