Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Thread2
- {
- // Главный поток запускает подчиненный поток и в цикле 4 раза через каждые 500 мс пытается аварийно завершить подчиненный поток.
- // Подчиненный поток в цикле 10 раз каждые 200 мс выводит на экран сообщение1.В последнем цикле поток печатает сообщение2.
- // При попытке аварийного завершения подчиненного потока, он остается в рабочем состоянии и печатает сообщение3.
- // После неудачных попыток завершения подчиненного потока, главный поток ожидает завершения подчиненного потока и после печатает сообщение4
- class MyThread
- {
- public Thread thrd;
- int i;
- int n = 0;
- int k;
- public MyThread()
- {
- thrd = new Thread(new ThreadStart(Run));
- thrd.Start();
- }
- void Run()
- {
- try
- {
- for (i = n; i < 10; i++)
- {
- k = i;
- Console.WriteLine("Thread: {0} итерация цикла", i + 1);
- Thread.Sleep(200);
- if (i == 9)
- {
- Console.WriteLine("Thread: Последняя итерация цикла");
- return;
- }
- }
- }
- catch(ThreadAbortException)
- {
- Console.WriteLine("Thread: ПРОДОЛЖЕНИЕ РАБОТЫ ПОТОКА");
- Thread.ResetAbort();
- }
- n = k;
- Run();
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- MyThread daughThread = new MyThread();
- int i;
- for(i = 0; i < 4; i++)
- {
- Thread.Sleep(500);
- Console.WriteLine("Main: попытка завершения потока");
- daughThread.thrd.Abort();
- }
- daughThread.thrd.Join();
- Console.WriteLine("Main: Дочерний поток завершён");
- Console.ReadKey(true);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement