На этом шаге мы рассмотрим программу, где создается несколько дочерних потоков.
На следующих шагах мы рассмотрим различные способы создания потоков в программе. Еще одна программа иллюстрирует подход, при котором в программе создается несколько дочерних потоков, причем на этот раз программный код потоков реализуется на основе нестатических методов. Рассмотрим приведенный ниже код.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace pr238_1 { // Класс с методом для выполнения в потоке: class MyClass { // Количество сообщений: private int count; // Время задержки между сообщениями: private int time; // Текст для отображения: private string text; // Метод для выполнения в потоке: public void show() { Console.WriteLine(text + ": Начало..."); for(int i = 1; i <= count; i++) { // Отображение сообщения: Console.WriteLine(text + " -> " + i); // Задержка в выполнении потока: Thread.Sleep(time); } Console.WriteLine(text + ": Завершение..."); } // Конструктор: public MyClass(int c, int t, string txt) { count = c; time = t; text = txt; } } // Главный класс: class Program { static void Main() { Console.WriteLine("Главный поток: Начало..."); // Создание объектов: MyClass objA = new MyClass(5, 2000, "Поток A"); MyClass objB = new MyClass(6, 1200, "Поток B"); MyClass objC = new MyClass(8, 1000, "Поток C"); // Создание объектов потоков: Thread A = new Thread(objA.show); Thread B = new Thread(objB.show); Thread C = new Thread(objC.show); // Запуск дочерних потоков: A.Start(); B.Start(); C.Start(); Console.WriteLine("Главный поток: Завершение..."); // Задержка: Console.ReadLine(); } } }
Ниже показан возможный результат выполнения программы:
Рис.1. Результат работы приложения
В этой программе в главном потоке создаются три дочерних потока. Дочерние потоки создаются на основе нестатического метода show(), описанного в классе MyClass. У класса MyClass есть:
Значения полей передаются аргументами конструктору при создании объекта и используются в методе show(). В теле конструктора командой
SPAN CLASS="tp_oop">Console.WriteLine(text + ": Начало...");
Console.WriteLine(text + " -> " + i);
Thread.Sleep(time); .
После завершения цикла командой
Console.WriteLine(text + ": Завершение...");
В главном методе отображается сообщение о начале выполнения главного потока (команда
Console.WriteLine("Главный поток: Начало...");
A.Start(); , B.Start();
C. Start();
Console.WriteLine("Главный поток: Завершение...");
На следующем шаге мы продолжим изучение этого вопроса.