00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #ifndef _threadstartdelegate_h
00024 #define _threadstartdelegate_h
00025 
00026 #include <spl/Memory.h>
00027 #include <spl/threading/Thread.h>
00028 
00057 template<class T> class ThreadStartDelegate : public Thread
00058 {
00059 private:
00060         T* m_object;
00061         void (T::*m_func)();
00062 
00063 public:
00064 
00072         inline ThreadStartDelegate(T *object, void (T::* func)())
00073         : m_object(object), m_func(func)
00074         {
00075         }
00076 
00077         inline ThreadStartDelegate()
00078         : m_object(NULL), m_func(NULL)
00079         {
00080         }
00081 
00082         virtual ~ThreadStartDelegate()
00083         {
00084         }
00085 
00086         inline void Set(T *object, void (T::* func)())
00087         {
00088                 m_object = object;
00089                 m_func = func;
00090         }
00091 
00092 #if defined(DEBUG)
00093         void CheckMem() const
00094         {
00095         }
00096 
00097         void ValidateMem() const
00098         {
00099         }
00100 #endif
00101 
00102 private:
00103         virtual void Run()
00104         {
00105                 (m_object->*m_func)();
00106         }
00107 };
00108 
00109 #endif