Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

 // Получение объекта с информацией и преобразование его в строку.

 string msg = (string)itfAR.AsyncState;

 Console.WriteLine(msg);

}

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

Рис. 14.4. Передача и получение пользовательских данных состояния

Чудесно! Теперь, когда вы понимаете, что делегат .NET можно использовать для автоматического запуска вторичного потока выполнения, обрабатывающего асинхронный вызов метода, давайте обратим внимание на возможности непосредственного взаимодействия о потоками с помощью пространства имен System.Threading.

Исходный код. Проект AsyncCallbackDelegate размещен в подкаталоге, соответствующем главе 14.

Пространство имен System.Threading

В рамках платформы .NET пространство имен System.Threading предлагает ряд типов, позволяющих строить многопоточные приложения. Вдобавок к типам, с помощью которых можно взаимодействовать с отдельными потоками CLR, в этом пространстве имен определены также типы, обеспечивающие доступ к поддерживаемому средой CLR пулу потоков, простой (не имеющий графического интерфейса) класс Timer и множество типов, предназначенных для поддержки синхронизированного доступа к разделяемым ресурсам. Описания основных членов этого пространства имен приведены табл. 14.1. (Не забывайте о том, что подробности всегда можно найти в документации .NET Framework 2.0 SDK.)

Таблица 14.1. Подборка типов пространства имен System.Threading

Тип Описание
Interlocked Предлагает атомарные операции для типов, открытых для множества потоков.
Monitor Обеспечивает синхронизацию объектов потоков с помощью блокировок и ожиданий/сигналов, ключевое слово C# lock использует тип Monitor в фоновом режиме
Mutex Примитив синхронизации, используемый для синхронизации взаимодействия между границами доменов приложения
ParameterizedThreadStart Делегат (появившийся только в .NET 2.0), позволяющий потоку вызывать методы с любым числом аргументов
Semaphore Позволяет ограничить число потоков, которые могут иметь конкурентный доступ к ресурсу или определенному типу ресурсов
Thread Представляет поток, выполняющийся в среде CLR. С помощью этого типа можно создавать дополнительные потоки в оригинальном домене приложения
ThreadPool Позволяет взаимодействовать о пулам потоков, управляемым средой CLR в рамках данного процесса
ThreadPriority Перечень, представляющий уровень приоритета потока (Highest, Normal и т.д.)
ThreadStart Делегат, используемый для указания метода, вызываемого для данного потока. В отличие от ParameterizedThreadStart, целевые методы ThreadStart должны соответствовать фиксированному шаблону
ThreadState Перечень, указывающий состояния, допустимые для данного потока (Running, Aborted и т.д.)
Timer Обеспечивает механизм выполнения метода через заданные интервалы времени
TimerCallback Делегат, используемый в совокупности с типами Timer

Класс 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";

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

  • Читать дальше
  • 1
  • ...
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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