Re[3]: неубиваемый поток с HTTPListener
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 15.04.07 10:36
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Здравствуйте, Undertaker, Вы писали:


U>>Я недавно столкнулся с такой же проблемой. Беда в том, что Thread.Abort абортит поток только в случае, если он был заблокирован в managed коде. Т.к. HttpListener это всего лишь обертка над http.sys, которая входит в ядро ОС, и блокировка происходит уже в unmanaged коде, то прервать выполнение потока не получается.

_C_>Совершенно справедливо!
_C_>Меня смущает, что в .net нет аналога C exit() ? Этож почему я не могу завершить прогу, если хочу?!

а так:

      static void Main(string[] args)
      {
         Console.WriteLine("Main() стартует...");

         AppDomain ad = AppDomain.CreateDomain("worker");
         Thread t = new Thread(delegate()
         {
            ad.DoCallBack(Work);
         });

         t.Start();

         Thread.Sleep(100);

         Console.WriteLine("Пробуем убить Work()...");
         
         t.Abort();
         
         if (!t.Join(2000))
            Console.WriteLine("Work() убиться отказался :(");
         else
            Console.WriteLine("Work() убит!");

         Console.WriteLine("Выгружаем домен");

         AppDomain.Unload(ad); 

         Console.WriteLine("Поток завершен и программа тож!");
      }

      static void Work()
      {
         Console.WriteLine("Work() стартует...");
         // тут нечто неубиваемое
         Console.WriteLine("Work() нормально завершается");
      }
... << RSDN@Home 1.2.0 alpha rev. 675>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.