Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Класс System.Threading.Thread

Основным в пространстве имен System.Threading является класс Thread. Этот класс представляет собой объектный контейнер отдельной ветви выполнения в конкретном домене приложения. Он определяет ряд методов (как статических, так и общедоступных), которые позволяют создавать новые потоки в текущем домене приложения, а также приостанавливать, останавливать и завершать отдельные потоки. Рассмотрите описания основных статических членов, приведенные в табл. 14.2.

Таблица 14.2. Основные статические члены типа Thread

Статический член

Описание

CurrentContext

Доступное только для чтения свойство, возвращающее контекст, в котором выполняется поток в настоящий момент

CurrentThread

Доступное только для чтения свойство, возвращающее ссылку на выполняемый в настоящий момент поток

GetDomain() GetDomainID()

Методы, возвращающие ссылки на текущий домен приложения или идентификатор домена, в котором выполняется текущий поток

Sleep()

Метод, приостанавливающий выполнение текущего потока на указанное время

Класс Thread также поддерживает набор членов уровня экземпляра. Описания некоторых из этих членов приведены в табл. 14.3.

Таблица 14.3. Члены уровня экземпляра типа Thread 

Член уровня экземпляра

Описание

IsAlive

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

IsBackground

Читает или устанавливает значение, сообщающее о том, является ли данный поток "фоновым" (дополнительные подробности будут предложены чуть позже)

Name

Позволяет задать понятное строковое имя потока

Priority

Читает или устанавливает приоритет потока, которому может быть назначено значение из перечня ThreadPriority

ThreadState

Читает информацию о состоянии потока, которая может принимать значения из перечня ThreadState

Abort()

Дает указание среде CLR завершить поток как можно быстрее

Interrupt()

Выводит (например, путем активизации) текущий поток из периода ожидания

Join()

Блокирует вызывающий поток до завершения указанного потока (того, для которого вызывается Join())

Resume()

Возобновляет выполнение приостановленного ранее потока  

Start()

Дает указание среде CLR как можно быстрее начать выполнение потока

Suspend()

Приостанавливает выполнение потока. Если поток уже приостановлен, вызов Suspend() игнорируется

Получение информации об отдельном потоке

Напомним, что точка входа компоновочного блока (т.е. метод Main()) при выполнении оказывается в первичном потоке. Чтобы привести типичный пример использования типа Thread, предположим, что у нас есть новое консольное приложение с именем ThreadState. Вы знаете, что статическое свойство Thread.СurrentThread позволяет получить тип Thread, представляющий выполняемый в настоящий момент поток. Получив текущий поток, вы можете вывести на экран различную информацию о потоке.

// Не забудьте указать 'using' для пространства имен System.Threading.

static void Main(string[] args) {

 Console.WriteLine("***** Информация первичного потока *****\n");

 // Получение текущего потока и назначение ему имени.

 Thread primaryThread = Thread.CurrentThread;

 primaryThread.Name = "ThePrimaryThread";

 // Подробности хостинга домена приложения и контекста.

 Console.WriteLine("Имя текущего домена приложения: {0}";

 Thread.GetDomain().FriendlyName);

 Console.WriteLine("Идентификатор текущего контекста: {0}", Thread.CurrentContext.ContextID);

 // Вывод информации о данном потоке.

 Console.WriteLine("Имя потока: {0}", primaryThreаd.Name);

 Console.WriteLine("Запущен ли поток? {0}", primaryThread.IsAlive);

 Console.WriteLine("Уровень приоритета: {0}", primaryThread.Priority);

 Console.WriteLine("Состояние потока: {0}", primaryThread.ThreadState);

 Console.ReadLine();

}

На рис. 14.5 показан вывод этого приложения.

Рис. 14.5. Сбор статистики о потоке