コード例 #1
0
        public void checkQueue(double time)
        {
            List <int> ptr = new List <int>();

            //Загружаем задачи из плана
            for (int i = 0; i < queue.Count; i++)
            {
                Task t = queue.ElementAt(i);
                if (time > t.getTimeInit())
                {
                    listQ.Enqueue(t);
                    ptr.Add(t.getId());
                }
            }
            foreach (int p in ptr)
            {
                Task t = null;
                foreach (Task t1 in queue)
                {
                    if (t1.getId() == p)
                    {
                        t = t1;
                        break;
                    }
                }
                queue.Remove(t);
            }
            //Удаляем просроченные задачи
            ptr = new List <int>();
            for (int i = 0; i < listQ.Count; i++)
            {
                Task t = listQ.ElementAt(i);
                if (time > (t.getTimeInit() + t.getDeadline()))
                {
                    ptr.Add(t.getId());
                }
            }
            foreach (int p in ptr)
            {
                Task t = null;
                foreach (Task t1 in listQ)
                {
                    if (t1.getId() == p)
                    {
                        t = t1;
                        break;
                    }
                }
                t.setEnd(time);
                ready.Enqueue(t);
                listQ.Remove(t);
            }
        }
コード例 #2
0
        public void run()
        {
            number = new List <int>();
            free   = 0;
            busy   = 0;
            double time = 0;

            while ((listQ.Count != 0) || (queue.Count != 0))
            {
                checkQueue(time);
                cluster.voting();
                if ((listQ.Count > 0) || (cluster.freeCluster(time)))
                {
                    number.Add(listQ.Count);
                    double nextTime = double.MaxValue;
                    while ((listQ.Count > 0) && (cluster.freeCluster(time)))
                    {
                        double T     = 0;
                        double score = double.MaxValue;
                        int    ptr   = -1;
                        for (int i = 0; i < listQ.Count; i++)
                        {
                            if (getScore(listQ.ElementAt(i), time) < score)
                            {
                                score = getScore(listQ.ElementAt(i), time);
                                ptr   = i;
                            }
                        }
                        T = listQ.ElementAt(ptr).getTime();
                        listQ.ElementAt(ptr).execute(time);
                        Task t = listQ.ElementAt(ptr);
                        listQ.Remove(t);
                        //В список решенных
                        ready.Enqueue(t);
                        //time += T;
                        //busy += T;
                        if (T < nextTime)
                        {
                            nextTime = T;
                        }
                    }
                    time += nextTime;
                }
                else
                {
                    double initTime = double.MaxValue;
                    int    ptr      = 0;
                    for (int i = 0; i < queue.Count; i++)
                    {
                        if (queue.ElementAt(i).getTimeInit() < initTime)
                        {
                            ptr      = i;
                            initTime = queue.ElementAt(i).getTimeInit();
                        }
                    }
                    if (initTime == double.MaxValue)
                    {
                        time = double.MaxValue;
                    }
                    else
                    {
                        free += (initTime + 0.00000000000001) - time;
                        time  = initTime + 0.00000000000001;
                    }
                }
            }
        }