示例#1
0
        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();//возможный вариант закрытия (прерывание - жесткое - на любом месте - может нарушить целостнось каких-то данных) потока но не очень
        }
示例#3
0
        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();
            }
        }