Exemple #1
0
        public void GenerateNextState()
        {
            UpdateStatus();

            if (p2.IsBlock())
            {
                if (p2.IsComplate())
                {
                    p2.Task.IsExit = true;
                    outputTasks.Add(p2.Task);
                    p2.Clean();
                }
            }

            if (p1.IsBlock())
            {
                if (p1.IsComplate())
                {
                    if (p2.IsBlock())
                    {
                        outputTasks.Add(p1.Task);
                    }
                    else
                    {
                        p2.Task = p1.Task;
                    }
                    p1.Clean();
                }
            }

            if (!queue.IsQueueEmpty())
            {
                if (!p1.IsBlock())
                {
                    p1.Task = queue.RemoveTask();
                }
            }

            if (p.IsComplate())
            {
                var newTask = new Task(++countOfTasks);
                if (!p1.IsBlock())
                {
                    p1.Task = newTask;
                }
                else
                {
                    if (!queue.IsBlock())
                    {
                        queue.AddTask(newTask);
                    }
                    else
                    {
                        outputTasks.Add(newTask);
                    }
                }
            }

            queue.UpdateTimeForTask();
        }