示例#1
0
文件: TaskPool.cs 项目: zhoulk/Lufy
        private void ProcessWaitingTasks(float elapseSeconds, float realElapseSeconds)
        {
            LinkedListNode <T> current = m_WaitingTasks.First;

            while (current != null && m_Agent != null)
            {
                T task = current.Value;
                LinkedListNode <T> next   = current.Next;
                StartTaskStatus    status = m_Agent.Start(task);
                if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError)
                {
                    m_Agent.Reset();
                }

                if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError)
                {
                    m_WaitingTasks.Remove(current);
                }

                if (status == StartTaskStatus.Done || status == StartTaskStatus.UnknownError)
                {
                    ReferencePool.Release(task);
                }

                current = next;
            }
        }
示例#2
0
        private void ProcessWaitingTasks(float elapseSeconds, float realElapseSeconds)
        {
            LinkedListNode <T> current = m_WaitingTasks.First;

            while (current != null && FreeAgentCount > 0)
            {
                ITaskAgent <T> agent = m_FreeAgents.Pop();
                LinkedListNode <ITaskAgent <T> > agentNode = m_WorkingAgents.AddLast(agent);
                T task = current.Value;
                LinkedListNode <T> next   = current.Next;
                StartTaskStatus    status = agent.Start(task);
                if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError)
                {
                    agent.Reset();
                    m_FreeAgents.Push(agent);
                    m_WorkingAgents.Remove(agentNode);
                }

                if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError)
                {
                    m_WaitingTasks.Remove(current);
                }

                if (status == StartTaskStatus.Done || status == StartTaskStatus.UnknownError)
                {
                    ReferencePool.Release(task);
                }

                current = next;
            }
        }
示例#3
0
        private void ProcessWaitingTasks(float deltaTime, float unscaledDeltaTime)
        {
            LinkedListNode <T> current = m_WaitingTasks.First;

            while (current != null && FreeAgentCount > 0)
            {
                ITaskAgent <T> agent = m_FreeAgents.Pop();
                LinkedListNode <ITaskAgent <T> > agentNode = m_WorkingAgents.AddLast(agent);
                LinkedListNode <T> next   = current.Next;
                StartTaskStatus    status = agent.StartTask(current.Value);
                if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError)
                {
                    agent.Reset();
                    m_FreeAgents.Push(agent);
                    m_WorkingAgents.Remove(agentNode);
                }

                if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError)
                {
                    m_WaitingTasks.Remove(current);
                }

                current = next;
            }
        }