public static void Start() { Console.WriteLine($"Количество ядер: {Environment.ProcessorCount}"); Thread current_thread = Thread.CurrentThread; current_thread.Name = "Главный поток"; CheckThread(); //System.Diagnostics.Process //var clock_thread = new Thread(new ThreadStart(ClockUpdater)); var clock_thread = new Thread(ClockUpdater); clock_thread.Priority = ThreadPriority.Highest; clock_thread.Name = "Поток часов"; clock_thread.IsBackground = true; clock_thread.Start(); var message = "Hello world!"; //var printer_thread = new Thread(new ParameterizedThreadStart(Printer)); var printer_thread = new Thread(Printer); printer_thread.IsBackground = true; printer_thread.Name = "Поток принтера"; printer_thread.Start(message); var printer2_thread = new Thread(() => Printer(message)); printer2_thread.Name = "Поток принтера 2"; //printer2_thread.Start(); var printer3 = new Printer3(message); var printer3_thread = new Thread(printer3.Print); printer3_thread.Name = "Поток принтера 3"; printer3_thread.Start(); Console.ReadLine(); _IsClockEnable = false; if (!clock_thread.Join(200)) { clock_thread.Interrupt(); } //clock_thread.Abort(); //clock_thread.Interrupt(); //clock_thread.Join(); }
public static void Start() { Thread current_thread = Thread.CurrentThread; current_thread.Name = "Main thread"; CheckThread(); //ClockUpdater(); //Thread clock_thread = new Thread(new ThreadStart(ClockUpdater));//все, что в скобках, за нас допишит компилятор Thread clock_thread = new Thread(ClockUpdater); //создан холодный поток clock_thread.Start(); //запустили поток - сделали его горячим, !!!приложение будет работать, пока не закончит работать этот поток clock_thread.Priority = ThreadPriority.Highest; clock_thread.IsBackground = true; //лучше для прекращения потока вместе с основным clock_thread.Name = "Clock thread"; string msg = "Hello, world"; //Thread printer_thread = new Thread(new ParameterizedThreadStart(Printer)); Thread printer_thread = new Thread(Printer); printer_thread.Name = "Printer thread"; printer_thread.IsBackground = true; printer_thread.Start(msg); //еще вариант передачи параметра в поток Thread print2_thread = new Thread(() => Printer(msg)); print2_thread.Name = "Printer thread 2"; print2_thread.Start(); //еще вариант передачи параметра в поток Printer3 printer3 = new Printer3(msg); Thread print3_thread = new Thread(printer3.Print); print3_thread.Name = "Printer thread 3"; print3_thread.Start(); IsClockEnable = false; //самый мягкий способ if (!clock_thread.Join(100)) { clock_thread.Interrupt(); //для комбинированного выхода - 100 - д.б. больше тайм-аута потока } ReadLine(); //clock_thread.Join();//основной поток не завершиться пока не завершиться Клок //clock_thread.Interrupt();//возможный вариант закрытия (прерывание - мягкое - ) потока но не очень //clock_thread.Abort();//возможный вариант закрытия (прерывание - жесткое - на любом месте - может нарушить целостнось каких-то данных) потока но не очень }
public static void Start() { //System.Threading.Thread Thread current_thread = Thread.CurrentThread; current_thread.Name = "Консольный поток"; // Частичные инструменты управления потоками своими и чужими //System.Diagnostics.Process //Environment.ProcessorCount - кол-во ядер процессора CheckThread(); //var clock_tread = new Thread(new ThreadStart(ClockUpdater)); var clock_tread = new Thread(ClockUpdater); clock_tread.Priority = ThreadPriority.Highest; clock_tread.Name = "Поток часов"; clock_tread.IsBackground = true; clock_tread.Start(); var message = "Hello world!"; //var printer_tread = new Thread(new ParameterizedThreadStart(CrazyPrinter)); //var printer_tread = new Thread(CrazyPrinter); //printer_tread.Name = "Поток принтера"; //printer_tread.IsBackground = true; //printer_tread.Start(message); //var printer2_tread = new Thread(() => CrazyPrinter(message)); //printer2_tread.Name = "Поток принтера2"; //printer2_tread.IsBackground = true; //printer2_tread.Start(); var printer3 = new Printer3(message); var printer3_tread = new Thread(printer3.Print); printer3_tread.Name = "Поток принтера2"; printer3_tread.IsBackground = true; printer3_tread.Start(); //ClockUpdater(); Console.ReadLine(); // Консоль не закроется, пока все потоки не будут закрыты, к примеру // Не безопасно //clock_tread.Abort(); // Оба плохи //clock_tread.Interrupt(); // Мягкое прерывание - Исключинтельно в sleep //clock_tread.Abort(); // Жёсткое прерывания - битые данные //clock_tread.Join(); _IsClockEnable = false; if (!clock_tread.Join(200)) { clock_tread.Interrupt(); } }