Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

' }

}

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; }

Состояние потока возвращается в виде значения, определенного в перечислении ThreadState. Ниже приведены значения, определенные в этом перечислении.

ThreadState.Aborted

ThreadState.AbortRequested

ThreadState.Background

ThreadState.Running

ThreadState.Stopped

ThreadState.StopRequested

ThreadState.Suspended

ThreadState.SuspendRequested

ThreadState.Unstarted

ThreadState.WaitSleepJoin

Все

эти значения не требуют особых пояснений, за исключением одного. Значение
ThreadState . WaitsleepJoin обозначает состояние, в которое поток переходит во время ожидания в связи с вызовом метода Wait , Sleep или Join .

Применение основного потока

Как пояснялось в самом начале этой главы, у всякой программы на C# имеется хотя бы один поток исполнения, называемый основным. Этот поток программа получает автоматически, как только начинает выполняться. С основным потоком можно обращаться таким же образом, как и со всеми остальными потоками.

Для доступа к основному потоку необходимо получить объект типа Thread, который ссылается на него. Это делается с помощью свойства CurrentThread, являющегося членом класса Thread. Ниже приведена общая форма этого свойства.

Данное свойство возвращает ссылку на тот поток, в котором оно используется. Поэтому если свойство CurrentThread используется при выполнении кода в основном потоке, то с его помощью можно получить ссылку на основной поток. Имея в своем распоряжении такую ссылку, можно управлять основным потоком так же, как и любым другим потоком.

В приведенном ниже примере программы сначала получается ссылка на основной поток, а затем получаются и устанавливаются имя и приоритет основного потока.

// Продемонстрировать управление основным потоком.

using System;

using System.Threading;

class UseMain {

static void Main {

Thread Thrd;

// Получить основной поток.

Thrd = Thread.CurrentThread;

// Отобразить имя основного потока, if(Thrd.Name == null)

Console.WriteLine("У основного потока нет имени."); else

Console.WriteLine("Основной поток называется: " + Thrd.Name);

// Отобразить приоритет основного потока.

Console.WriteLine("Приоритет: " + Thrd.Priority);

Console.WriteLine;

// Установить имя и приоритет.

Поделиться:
Популярные книги

Невеста инопланетянина

Дроздов Анатолий Федорович
2. Зубных дел мастер
Фантастика:
космическая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Невеста инопланетянина

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Облачный полк

Эдуард Веркин
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Облачный полк

Хозяйка усадьбы, или Графиня поневоле

Рамис Кира
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Хозяйка усадьбы, или Графиня поневоле

Наследник павшего дома. Том II

Вайс Александр
2. Расколотый мир [Вайс]
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том II

Я уже князь. Книга XIX

Дрейк Сириус
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я уже князь. Книга XIX

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Девочка-яд

Коэн Даша
2. Молодые, горячие, влюбленные
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-яд

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Барону наплевать на правила

Ренгач Евгений
7. Закон сильного
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барону наплевать на правила

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2