Exemple #1
0
        static void Main(string[] args)
        {
            //Создадим пул потоков из 3-х потоков.
            FixedThreadPool testPool          = new FixedThreadPool(3);
            Task            tranquilityHigh   = new Task(TranquilityHigh);
            Task            tranquilityNormal = new Task(TranquilityNormal);
            Task            tranquilityLow    = new Task(TranquilityLow);

            Console.WriteLine("Before signal Stop");
            Console.WriteLine("First tasks");
            //Заполним очередь задачами с разными приоритетами.
            for (int i = 0; i < 4; i++)
            {
                testPool.Execute(tranquilityHigh, Priority.HIGH);
                testPool.Execute(tranquilityNormal, Priority.NORMAL);
                testPool.Execute(tranquilityLow, Priority.LOW);
            }
            //Дождемся пока очередь опустеет.
            Thread.Sleep(20000);
            //Добавим еще задач.
            Console.WriteLine("Second tasks");
            for (int i = 0; i < 2; i++)
            {
                testPool.Execute(tranquilityHigh, Priority.HIGH);
                testPool.Execute(tranquilityNormal, Priority.NORMAL);
                testPool.Execute(tranquilityLow, Priority.LOW);
            }
            Console.WriteLine("Signal Stop");
            //Подаем сигнал Stop.
            testPool.Stop();
            Console.WriteLine("After signal Stop");
            bool isStopped;

            //Пытаемся добавить задачи в очередь.
            for (int i = 0; i < 4; i++)
            {
                isStopped = testPool.Execute(tranquilityHigh, Priority.HIGH);
                Console.WriteLine("Execute() returns " + isStopped.ToString());
            }
            //Даем время потокам завершить все задачи.
            Thread.Sleep(10000);
            //Снова запускаем работу очереди.
            testPool.Go();
            Console.WriteLine("After signal Go");
            //Пытаемся добавить задачи в очередь.
            for (int i = 0; i < 4; i++)
            {
                isStopped = testPool.Execute(tranquilityLow, Priority.LOW);
                Console.WriteLine("Execute() returns " + isStopped.ToString());
            }
            //Даем время потокам завершить все задачи.
            Thread.Sleep(5000);
            Console.WriteLine("............ END ..............");
        }
 /// <summary>
 /// Конструктор очереди задач.
 /// </summary>
 /// <param name="parent">
 /// Ссылка на экземпляр родительского класса.
 /// </param>
 public PriorityQueue(FixedThreadPool parent)
 {
     _parent = parent;
 }