|
Программирование >> Обработка исключительных ситуаций
class ObsA { public void OnOopsC object sender, EventArgs e ) Console.WriteLineC Вижу, что OOPS! ); class ObsB public static void OnOopsC object sender, EventArgs e ) Console.WriteLineC Я тоже вижу, что OOPS! ): class Classl { static void MainO Subj s = new SubjC); ObsA ol new ObsAC); ObsA o2 = new ObsAC); s.Oops += ol.OnOops; s.Oops += o2.0n0ops; s.Oops += ObsB.OnOops; s.Oops += delegate ( object sender, EventArgs e ) { Console.WriteLineC Я с вами! ); }; s.CryOopsO; События включены во многие стандартные классы .NET, например, в классы пространства имен Windows.Forms, используемые для разработки Windows-приложений. Мы рассмотрим эти классы в главе 14. Многопоточные приложения Приложение .NET состоит из одного или нескольких процессов. Процессу принадлежат выделенная для него область оперативной памяти и ресурсы. Кажждый процесс может состоять из нескольких доменов (частей) приложения, ресурсы if ( Oops != null ) Oops( this, null ); Класс Thread Поддержка многопоточности осуществляется в .NET в основном с помощью пространства имен System.Threading. Некоторые типы этого пространства описаны в табл. 10.1. Таблица 10.1. Некоторые типы пространства имен System.Threading Тип Описание Interlocked Класс, обеспечивающий синхронизированный доступ к переменным, которые используются в разных потоках Monitor Класс, обеспечивающий синхронизацию доступа к объектам Mutex Класс-примитив синхронизации, который используется также для синхронизации между процессами ReaderWriterLock Класс, определяющий блокировку, поддерживающую один доступ на запись и несколько - на чтение Thread Класс, который создает поток, устанавливает его приоритет, получает информацию о состоянии 1 Иногда этот термин перево.дится буквально - нить , чтобы отличить его от потоков ввода-в1вода, которые рассматриваются в следдующей главе. Поэтому в литературе ож-но встретить и термин многонитевые приложения . которых изолированы друг от друга. В рамках домена может быть запущено несколько потоков выполнения. Поток (thread ) представляет собой часть исполняемого кода программ!. В каждом процессе есть первичный поток, исполняющий роль точки входа в приложение. Для консольных приложений это метод Main. Многопоточные приложения создают как для многопроцессорных, так и для однопроцессорных систем. Основной целью при этом являются повышение общей производительности и сокращение времени реакции приложения. Управление потоками осуществляет операционная система. Каждый поток получает некоторое количество квантов времени, по истечении которого управление передается другому потоку. Это создает у пользователя однопроцессорной машины впечатление одновременной работы нескольких потоков и позволяет, к примеру, выполнять ввод текста одновременно с длительной операцией по передаче данных. Недостатки многопоточности: большое количество потоков ведет к увеличению накладных расходов, связанных с их переключением, что снижает общую производительность систем!; в многопоточных приложениях возникают проблемы синхронизации данных, связанные с потенциальной возможностью доступа к одним и тем же данным со стороны нескольких потоков (например, если один поток начинает изменение общих данных, а отведенное ему время истекает, доступ к этим же данным может получить другой поток, который, изменяя данные, необратимо их повреждает). Описание ThreadPool Timer WaitHandle lOCompletionCallback ThreadStart TimerCallback WaitCanback ThreadPriority ThreadState Класс, используем1й для управления набором взаимосвязаннгх потоков - пулом потоков Класс, определяющий механизм вызова заданного метода в заданные интервалы времени для пула потоков Класс, инкапсулирующий объекты синхронизации, которые ожидают доступа к разделяемым ресурсам Класс, получающий сведения о завершившейся операции ввода-в1вода Делегат, представляющий метод, который должен быть выполнен при запуске потока Делегат, представляющий метод, обрабатывающий вызовы от класса Timer Делегат, представляющий метод для элементов класса ThreadPool Перечисление, описывающее приоритет потока Перечисление, описывающее состояние потока Первичный поток создается автоматически. Для запуска вторичных потоков используется класс Thread. При создании объекта-потока ему передается делегат, определяющий метод, выполнение которого выделяется в отдельный поток: Thread t = new Thread ( new ThreadStartC имя метода ) ); После создания потока заданный метод начинает в нем свою работу, а первичный поток продолжает выполняться. В листинге 10.10 приведен пример одновременной работы двух потоков. Листинг 10.10. Создание вторичного потока using System: using System.Threading: namespace ConsoleAppl icationi { class Program static public void HedgehogO метод для вторичного потока for (int i = 0; i < 6: ++i ) Console.WriteLineC i ); Thread.SleepC 1000 ); static void MainO Console.WriteLineC Первичный поток + Thread.CurrentThread.GetHashCodeO );
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |