static void Main() { // Сконструировать три потока. MyThread mt1 = new MyThread("Поток #1"); MyThread mt2 = new MyThread("Поток #2"); MyThread mt3 = new MyThread("Поток #3"); mt1.Thrd.Join(); mt2.Thrd.Join(); mt3.Thrd.Join(); }
static void Main() { TickTock tt = new TickTock(); MyThread mt1 = new MyThread("Tick", tt); MyThread mt2 = new MyThread("Tock", tt); mt1.Thrd.Join(); mt2.Thrd.Join(); Console.WriteLine("Часы остановлены"); }
static void Main() { MyThread mt1 = new MyThread("Мой Поток"); Thread.Sleep(1000); // разрешить порожденному потоку начать свое выполнение Console.WriteLine("Прерывание потока."); mt1.Thrd.Abort(100); mt1.Thrd.Join(); // ожидать прерывание потока Console.WriteLine("Основной поток прерван."); }
static void Main() { // Обратите внимание на то, что число повторений // передается этим двум объектам типа MyThread. MyThread mt = new MyThread("Потомок #1", 5); MyThread mt2 = new MyThread("Потомок #2", 3); do { Thread.Sleep(100); } while (mt.Thrd.IsAlive || mt2.Thrd.IsAlive); Console.WriteLine("Основной поток завершен."); }
static void Main() { Console.WriteLine("Основной поток начат."); // Сначала сконструировать объект типа MyThread. MyThread mt = new MyThread("Потомок #1"); do { Console.Write("."); Thread.Sleep(100); } while (mt.Count != 10); Console.WriteLine("Основной поток завершен."); }
static void Main() { Console.WriteLine("Основной поток начат."); // Сконструировать три потока. MyThread mt1 = new MyThread("Потомок #1"); MyThread mt2 = new MyThread("Потомок #2"); MyThread mt3 = new MyThread("Потомок #3"); do { Console.Write("."); Thread.Sleep(100); } while (mt1.Count < 10 || mt2.Count < 10 || mt3.Count < 10); // Использовать свойство IsAlive для отслеживания момента окончания потоков. // while (mt1.Thrd.IsAlive && mt2.Thrd.IsAlive && mt3.Thrd.IsAlive); Console.WriteLine("Основной поток завершен."); }
static void Main() { Console.WriteLine("Основной поток начат."); // Сконструировать три потока. MyThread mt1 = new MyThread("Потомок #1"); MyThread mt2 = new MyThread("Потомок #2"); MyThread mt3 = new MyThread("Потомок #3"); mt1.Thrd.Join(); Console.WriteLine("Потомок #1 присоединен."); mt2.Thrd.Join(); Console.WriteLine("Потомок #2 присоединен."); mt3.Thrd.Join(); Console.WriteLine("Потомок #3 присоединен."); Console.WriteLine("Основной поток завершен."); }
static void Main() { Console.WriteLine("Основной поток начат."); // Сначала сконструировать объект типа MyThread. MyThread mt = new MyThread("Потомок #1"); // Далее сконструировать поток из этого объекта. Thread newThrd = new Thread(mt.Run); // И наконец, начать выполнение потока. newThrd.Start(); do { Console.Write("."); Thread.Sleep(100); } while (mt.Count != 10); Console.WriteLine("Основной поток завершен."); }
static void Main() { ManualResetEvent evtObj = new ManualResetEvent(false); MyThread mt1 = new MyThread("Событийный Поток 1", evtObj); Console.WriteLine("Основной поток ожидает событие."); // Ожидать уведомления о событии. evtObj.WaitOne(); Console.WriteLine("Основной поток получил уведомление о событии от первого потока."); // Установить событийный объект в исходное состояние. evtObj.Reset(); mt1 = new MyThread("Событийный Поток 2", evtObj); // Ожидать уведомления о событии. evtObj.WaitOne(); Console.WriteLine("Основной поток получил уведомление о событии от второго потока."); }