Читаем C# 4.0 полное руководство - 2011 полностью

public MyThread(string name) {

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.Ниже приведена общая форма этого свойства.

public ThreadState ThreadState{ get; }

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT