Thrd = new Thread(this.Run);

Thrd.Name = name;

Thrd.Start();

}

// Это точка входа в поток, void Run()    {

Console.WriteLine(Thrd.Name + '.начат.');

try {

Console.Write(i + ' '); if((i %10)==0) {

Console.WriteLine ();

Thread.Sleep (250);

}

} catch(ThreadAbortException exc) { if((int)exc.ExceptionState ==0) {

Console.WriteLine('Прерывание потока отменено! ' +

'Код завершения ' + exc.ExceptionState);

Thread.ResetAbort();

}

else

Console.WriteLine('Поток прерван, код завершения ' + exc.ExceptionState);

' }

}

Console.WriteLine(Thrd.Name + ' завершен нормально.');

}

}

class ResetAbort { static void Main() {

MyThread mtl = new MyThread('Мой Поток');

Thread.Sleep(1000); // разрешить порожденному потоку начать свое выполнение

Console.WriteLine('Прерывание потока.'); mtl.Thrd.Abort(0); // это не остановит поток

Thread.Sleep(1000); // разрешить порожденному потоку выполняться подольше

Console.WriteLine('Прерывание потока.');    i

mtl.Thrd.Abort(100); // а это остановит поток

mtl.Thrd.Join(); // ожидать прерывания потока

Console.WriteLine('Основной поток прерван.');

}

}

Ниже приведен результат выполнения этой программы.

Поток прерван, код завершения 100

Основной поток прерван.

Если в данном примере программы метод Abort () вызывается с нулевым аргументом, то запрос на преждевременное прерывание отменяется потоком, вызывающим метод ResetAbort (), и выполнение этого потока продолжается. Любое другое значение аргумента приведет к прерыванию потока.

Приостановка и возобновление потока

В первоначальных версиях среды .NET Framework поток можно было приостановить вызовом метода Thread. Suspend () и возобновить вызовом метода Thread. Resume (). Но теперь оба эти метода считаются устаревшими и не рекомендуются к применению в новом коде. Объясняется это, в частности, тем, что пользоваться методом Suspend () на самом деле небезопасно, так как с его помощью можно приостановить поток, который в настоящий момент удерживает блокировку, что препятствует ее снятию, а следовательно, приводит к взаимоблокировке. Применение обоих методов может стать причиной серьезных осложнений на уровне системы. Поэтому для приостановки и возобновления потока следует использовать другие средства синхронизации, в том числе мьютекс и семафор.

Определение состояния потока

Состояние потока может быть получено из свойства Threadstate, доступного в классе Thread. Ниже приведена общая форма этого свойства.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату