示例#1
0
        private void CheckActiveJobs()
        {
            ThreadItem thread = m_Active;
            ThreadItem last   = null;

            while (thread != null)
            {
                ThreadItem next = thread.NextActive;
                T          job  = thread.Data;
                if (job.IsAborted)
                {
                    if (last == null)
                    {
                        m_Active = next;
                    }
                    else
                    {
                        last.NextActive = next;
                    }

                    thread.NextActive = null;

                    thread.Reset();
                    m_Threads.Push(thread);
                }
                else if (thread.Data.IsDataReady)
                {
                    job.OnFinished();
                    if (OnJobFinished != null)
                    {
                        OnJobFinished(job);
                    }

                    if (last == null)
                    {
                        m_Active = next;
                    }
                    else
                    {
                        last.NextActive = next;
                    }

                    thread.NextActive = null;

                    thread.Reset();
                    m_Threads.Push(thread);
                }
                else
                {
                    last = thread;
                }

                thread = next;
            }
        }