1.1 --- a/core/thread/BaseWorker.cpp Thu Jul 12 02:57:43 2007 +0000
1.2 +++ b/core/thread/BaseWorker.cpp Thu Jul 12 16:57:26 2007 +0000
1.3 @@ -14,9 +14,10 @@
1.4
1.5 #include "BaseWorker.h"
1.6
1.7 -BaseWorker::BaseWorker() :
1.8 +BaseWorker::BaseWorker(IThreadWorkerCallbacks *hooks) :
1.9 m_perFrame(SM_DEFAULT_THREADS_PER_FRAME),
1.10 - m_state(Worker_Stopped)
1.11 + m_state(Worker_Stopped),
1.12 + m_pHooks(hooks)
1.13 {
1.14 }
1.15
1.16 @@ -129,14 +130,18 @@
1.17 while (done < max)
1.18 {
1.19 if ((swt=PopThreadFromQueue()) == NULL)
1.20 + {
1.21 break;
1.22 + }
1.23 pThread = swt->pThread;
1.24 swt->m_state = Thread_Running;
1.25 pThread->RunThread(swt);
1.26 swt->m_state = Thread_Done;
1.27 pThread->OnTerminate(swt, false);
1.28 if (swt->m_params.flags & Thread_AutoRelease)
1.29 + {
1.30 delete swt;
1.31 + }
1.32 done++;
1.33 }
1.34
1.35 @@ -157,30 +162,46 @@
1.36
1.37 m_state = Worker_Running;
1.38
1.39 + if (m_pHooks)
1.40 + {
1.41 + m_pHooks->OnWorkerStart(this);
1.42 + }
1.43 +
1.44 return true;
1.45 }
1.46
1.47 bool BaseWorker::Stop(bool flush_cancel)
1.48 {
1.49 if (m_state == Worker_Invalid || m_state == Worker_Stopped)
1.50 + {
1.51 return false;
1.52 + }
1.53
1.54 if (m_state == Worker_Paused)
1.55 {
1.56 if (!Unpause())
1.57 + {
1.58 return false;
1.59 + }
1.60 }
1.61
1.62 m_state = Worker_Stopped;
1.63 Flush(flush_cancel);
1.64
1.65 + if (m_pHooks)
1.66 + {
1.67 + m_pHooks->OnWorkerStop(this);
1.68 + }
1.69 +
1.70 return true;
1.71 }
1.72
1.73 bool BaseWorker::Pause()
1.74 {
1.75 if (m_state != Worker_Running)
1.76 + {
1.77 return false;
1.78 + }
1.79
1.80 m_state = Worker_Paused;
1.81
1.82 @@ -191,7 +212,9 @@
1.83 bool BaseWorker::Unpause()
1.84 {
1.85 if (m_state != Worker_Paused)
1.86 + {
1.87 return false;
1.88 + }
1.89
1.90 m_state = Worker_Running;
1.91