unsigned int BaseWorker::RunFrame() { unsigned int done = 0; unsigned int max = GetMaxThreadsPerFrame(); SWThreadHandle *swt = NULL; IThread *pThread = NULL; while (done < max) { if ((swt=PopThreadFromQueue()) == NULL) { break; } pThread = swt->pThread; swt->m_state = Thread_Running; pThread->RunThread(swt); swt->m_state = Thread_Done; pThread->OnTerminate(swt, false); if (swt->m_params.flags & Thread_AutoRelease) { delete swt; } done++; } return done; }
unsigned int BaseWorker::Flush(bool flush_cancel) { SWThreadHandle *swt; unsigned int num = 0; while ((swt=PopThreadFromQueue()) != NULL) { swt->m_state = Thread_Done; if (!flush_cancel) swt->pThread->RunThread(swt); swt->pThread->OnTerminate(swt, flush_cancel); if (swt->m_params.flags & Thread_AutoRelease) delete swt; num++; } return num; }