Ejemplo n.º 1
0
        public CustomThreadWithTime GenerateThread()
        {
            Random rnd                  = new Random();
            int    priority             = rnd.Next(1, 30);
            int    time                 = rnd.Next(1, 50);
            CustomThreadWithTime thread = new CustomThreadWithTime(time, priority, 0);

            return(thread);
        }
Ejemplo n.º 2
0
        int maxSum = 1000;                                               //максимальна кылькысть заявок

        public void Execute(int a)
        {
            checkQueue.Enqueue(start);
            allThreads.Enqueue(start);
            while (checkQueue.Count > 0)
            {
                checkQueue = new Queue <CustomThreadWithTime>(checkQueue.OrderBy(c => c.Priority));
                CustomThreadWithTime current = checkQueue.Dequeue();
                if (allThreads.Count < maxSum)
                {
                    int time = a;//GenerateTime();
                    CustomThreadWithTime pretendent = GenerateThread();
                    if (pretendent.WaitingTime == 0)
                    {
                        pretendent.WaitingTime = globalTime;
                    }
                    if (pretendent.Priority < current.Priority)
                    {
                        globalTime          += time;
                        current.WaitingTime += time;
                        checkQueue.Enqueue(current);
                        checkQueue.Enqueue(pretendent);
                    }
                    else
                    {
                        globalTime += current.Time;
                        counter++;
                        checkQueue.Enqueue(pretendent);
                        current.WaitingTime = globalTime - current.WaitingTime;
                        allThreads.Enqueue(current);
                    }
                }
                else
                {
                    globalTime += current.Time;
                    counter++;
                }
            }
            Console.WriteLine(globalTime / counter);
            // Console.WriteLine(counter); ;
            List <ResultLine> res = allThreads.
                                    GroupBy(l => l.Priority)
                                    .Select(cl => new ResultLine
            {
                priority = cl.First().Priority,
                Sum      = cl.Sum(c => c.WaitingTime),
                Counted  = cl.Count(),
            }).OrderBy(cl => cl.priority).ToList();

            foreach (var resultLine in res)
            {
                Console.Write(resultLine.priority);
                Console.WriteLine();
            }
            foreach (var resultLine in res)
            {
                Console.Write(resultLine.Counted);
                Console.WriteLine();
            }
            foreach (var resultLine in res)
            {
                Console.Write(resultLine.Sum);
                Console.WriteLine();
            }
            foreach (var resultLine in res)
            {
                Console.Write(resultLine.priority + " " + resultLine.Counted + " " + resultLine.Sum);
                Console.WriteLine();
            }

            /* Console.WriteLine("ALL");
             * foreach (var item in allThreads)
             * {
             *   Console.Write(item.Priority + " "+item.WaitingTime);
             *   Console.WriteLine();
             * }
             */
        }