Advertisement
OOP_exam

2. Exam Task #1 (Threads)

Jan 17th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.56 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Thread2
  5. {
  6.     //  Главный поток запускает подчиненный поток и в цикле 4 раза через каждые 500 мс пытается аварийно завершить подчиненный поток.
  7.     //  Подчиненный поток в цикле 10 раз каждые 200 мс выводит на экран сообщение1.В последнем цикле поток печатает сообщение2.
  8.     //  При попытке аварийного завершения подчиненного потока, он остается в рабочем состоянии и печатает сообщение3.
  9.     //  После неудачных попыток завершения подчиненного потока, главный поток ожидает завершения подчиненного потока и после печатает сообщение4
  10.    
  11.     class MyThread
  12.     {
  13.         public Thread thrd;
  14.  
  15.         int i;
  16.         int n = 0;
  17.         int k;
  18.  
  19.         public MyThread()
  20.         {
  21.             thrd = new Thread(new ThreadStart(Run));
  22.             thrd.Start();
  23.         }
  24.  
  25.         void Run()
  26.         {
  27.             try
  28.             {
  29.                 for (i = n; i < 10; i++)
  30.                 {
  31.                     k = i;
  32.                     Console.WriteLine("Thread: {0} итерация цикла", i + 1);
  33.                     Thread.Sleep(200);
  34.  
  35.                     if (i == 9)
  36.                     {
  37.                         Console.WriteLine("Thread: Последняя итерация цикла");
  38.                         return;
  39.                     }
  40.                 }
  41.             }
  42.  
  43.             catch(ThreadAbortException)
  44.             {
  45.                 Console.WriteLine("Thread: ПРОДОЛЖЕНИЕ РАБОТЫ ПОТОКА");
  46.                 Thread.ResetAbort();
  47.             }
  48.  
  49.             n = k;
  50.             Run();
  51.         }
  52.     }
  53.     class Program
  54.     {
  55.         static void Main(string[] args)
  56.         {
  57.             MyThread daughThread = new MyThread();
  58.  
  59.             int i;
  60.             for(i = 0; i < 4; i++)
  61.             {
  62.                 Thread.Sleep(500);
  63.                 Console.WriteLine("Main: попытка завершения потока");
  64.                 daughThread.thrd.Abort();
  65.             }
  66.  
  67.             daughThread.thrd.Join();
  68.             Console.WriteLine("Main: Дочерний поток завершён");
  69.  
  70.             Console.ReadKey(true);
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement