/// <summary> /// Actual single-job Thread Code. /// </summary> protected override void execute() { try { while (true) { if (m_workPool.IsEmpty()) { break; } Debug.Assert(m_jobProcessor != null, "Job Processor is NULL!"); if (m_jobProcessor == null) { break; } BaseJob jobPtr = m_workPool.Dequeue(); jobPtr.JobReport(JobStatus.IN_PROCESS); m_jobProcessor.DoJob(this, jobPtr); jobPtr.JobReport(JobStatus.DONE); } callCallBack(); } catch (ThreadAbortException) { while (m_workPool.IsEmpty()) { BaseJob jobPtr = m_workPool.Dequeue(); jobPtr.JobReport(JobStatus.INCOMPLETE); } } }
/// <summary> /// Actual infinite-looping Thread Code. /// </summary> protected override void execute() { try { while (true) { if (m_terminateEvent.WaitForEvent(0)) { return; } if (m_workPool.IsEmpty()) { if (m_lifePolicy == ThreadLifePolicy.SUSPEND_AFTER_WORK) { callCallBack(); Suspend(); continue; } callCallBack(); Thread.Sleep(0); continue; } Debug.Assert(m_jobProcessor != null, "Job Processor is NULL!"); if (m_jobProcessor == null) { break; } BaseJob jobPtr = m_workPool.Dequeue(); jobPtr.JobReport(JobStatus.IN_PROCESS); m_jobProcessor.DoJob(this, jobPtr); jobPtr.JobReport(JobStatus.DONE); } } catch (ThreadAbortException) { while (m_workPool.IsEmpty()) { BaseJob jobPtr = m_workPool.Dequeue(); jobPtr.JobReport(JobStatus.INCOMPLETE); } } }