コード例 #1
0
 /// <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);
         }
     }
 }
コード例 #2
0
 /// <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);
         }
     }
 }