Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 166
Текст из файла (страница 166)
Когда созданный процесс завершается, следует вызвать метод С1озе (), чтобы освободить память, выделенную для этого процесса. Ниже приведена форма объявления метода С1озе П . рпвьгс чгогг( С1ове() Процесс может быть прерван двумя способами. Если процесс является приложением %)пг(очуз с графическим пользовательским интерфейсом, то для прерывания такого процесса вызывается метод С1озеиа1пи1пг(ои (), форма которого приведена ниже. риЬ11с Ьоо1 С1овеиа1пм1пг(он() 836 Часть )!. Библиотека С() Этот метод посылает процессу сообщение, предписывающее ему остановиться. Он возвращает логическое значение сгце, если сообщение получено, и логическое значение га1яе, если приложение не имеет графического пользовательского интерфейса или главного окна.
Следует, однако, иметь в виду, что метод С1ояеиа1ПИ1пг(оы() служит только для запроса остановки процесса. Если приложение проигнорирует такой запрос, то оно не будет прервано как процесс. Для безусловного прерывания процесса следует вызвать метод К111 (), как показано ниже. рцЬ11с ъоьб Кг11() Но методом К111 ( ) следует пользоваться аккуратно, так как он приводит к неконтролируемому прерыванию процесса. Любые несохраненные данные, связанные с прерываемым процессом, будут, скорее всего, удалены.
Для того чтобы организовать ожидание завершения процесса, можно воспользоваться методом ИабцрогЕхьт () . Ниже приведены две его формы. рцьтьс вот П Иа1) Рогкх1Г () рцЬ11с Ьоо1 ИаьггогЕхтк(гак миллисЕкуИД) В первой форме ожидание продолжается до тех пор, пока процесс не завершится, а во второй форме — только в течение указанного количества миллисекунд. В последнем случае метод Иа1срогЕх1с () возвращает логическое значение сгце, если процесс завершился, и логическое значение га1зе, если он все еще выполняется. В приведенном ниже примере программы демонстрируется создание, ожидание и закрытие процесса.
В этой программе сначала запускается стандартная сервисная программа 11/)пк(отуя: текстовый редактор тл/огк(ракт.ехе, а затем организуется ожидание завершения программы 1Чогк)рат) как процесса. // Продемонстрировать запуск нового процесса. ця1цд Яуягещт ця1оц Яуяьещ.оьадцояг1св; с1аяя Ясагсггосеяя ( ягас1с гоьб Маьп() ( Ргосеяя цемргос = Ргосевя.зкагк["могбрак(.ехе") сопяо1е.иг1геь1це("новый процесс запущен.") цеиРгос.ИаькгогЕх1Г(); пеиргос.С1ояе(); // освободить выделенные ресурсы Соцяо1е.нг1кеЬ1це("Новый процесс завершеи.")т ) При выполнении этой программы запускается стандартное приложение %огк(рак( и на экране появляется сообщение "новый процесс запущен.
". Затем программа ожидает закрытия 11/ого)рак(. По окончании работы Ъ(/огдрак( на экране появляется заключительное сообщение "новый процесс завершен. ". ГЛАВА Коллекции, перечислители и итераторы в этой главе речь пойдет об одной из самых важных составляющих среды .ХЕТ Ргашеч ог1с коллекциях. В С№ каллаа!ил представляет собой совок!~цвесть объектов. В среде .ХЕТ Ргатев ог1г имеется немало интерфейсов и классов, в которых определяются и реализуются различные типы коллекций.
Коллекции упрощают решение многих задач программирования благодаря тому, что предлагают готовые решения для создания целого ряда типичных, но порой трудоемких для разработки структур данных. Например, в среду .ХЕТ Ргашев ог1г встроены коллекции, предназначенные для поддержки динамических массивов, связных списков, стеков, очередей и хеш-таблиц. Коллекции являются современным технологическим средством, заслуживающим пристального внимания всех, кто программирует на С№. Первоначально существовали только классы необобщенных коллекций.
Но с внедрением обобщений в версии С№ 2.0 среда .ХЕТ Егатевогк была дополнена многими новыми обобщенными классами и интерфейсами. Благодаря введению обобщенных коллекций общее количество классов и интерфейсов удвоилось, и теперь прикладной интерфейс Со!1есг!опз АР1 стал довольно обширным. Обобщенные и необобщенные коллекции действуют по сходному пррнципу, и тем не менее между ними имеются некоторые отличия, поэтому в этой главе рассматриваются и те и другие типы коллекций. Кроме того, в настоящей главе рассматриваются два средства, непосредственно связанные с коллекциями: перечислители и итераторы. И те и другие позволяют поочередно обращаться к содержимому класса коллекции в цикле гогеасп. Краткий обзор коллекций Главное преимушество коллекций заключается в том, что они стандартизируют обработку групп объектов в программе. Все коллекции разработаны на основе набора четко определенных интерфейсов.
Некоторые встроенные реализации таких интерфейсов, в том числе Аггаупьэс, паэосаь1е, ясасх и ноеве, могут применяться в исходном виде и без каких-либо изменений. Имеется также возможность реализовать собственную коллекцию, хотя потребность в этом возникает крайне редко. В среде .ХЕТ Егатев ог1г поддерживаются четыре типа коллекций: необобщенные, специальные, с поразрядной организацией и обобщенные.
Необобщенные коллекции реализу- 838 Часть И. Библиотека С№ ют ряд основных структур данных, включая динамический массив, стет очередь, а также словари, в которых можно хранить пары "ключ-значение". В отношении иеобобщеииых коллекций важно иметь в виду следующее: оии оперируют данными типа оЬ1есс. Таким образом, иеобобшеииые коллекции могут служить для хранения данных любого типа, причем в одной коллекции допускается наличие разиотипиых данных. Очевидно, что такие коллекции ие типизироваиы, поскольку в иих хранятся ссылки иа данные типа оЬ1есс. Классы и интерфейсы иеобобщеииых коллекций находятся в пространстве имен Яузсеп.Со11есс1опз.
Специальные коллекции оперируют данными конкретного типа или же делают это каким-то особым образом. Например, имеются специальные коллекции для символьных строк, а также специальные коллекции, в которых используется однонаправленный список. Специальные коллекции объявляются в пространстве имен Яузсекл. Со11есс1опз. Яресга11зесд В прикладном интерфейсе Сойесйопз АР1 определена одна коллекция с поразрядной организацией — это В1сдггау.
Коллекция типа В1гдггау поддерживает поразрядные операции, т.е. операции иад отдельными двоичными разрядами, например И или исключающее ИЛИ, а следовательно, оиа существенно отличается своими возможностями от остальиых типов коллекций. Коллекция типа В1сдггау объявляется в пространстве имея'Бузгет.Со11есс1опз. Обобщенные коллекции обеспечивают обобщенную реализацию нескольких стандартиых структур данных, включая связные списки, стеки, очереди и словари. Такие коллекции являются типизированными в силу их обобщенного характера. Это озиачает, что в обобщенной коллекции могут храниться только такие элементы данных, которые совместимы по типу с данной коллекцией.
Благодаря этому исключается случайное иесовпадение типов. Обобщенные коллекции объявляются в пространстве имен Бузгекл. Со11есс1опз.пепег1с. В пространстве имен Бузгет. со11есс1опз. Оьб ессмобе1 находится также ряд классов, поддерживающих создание пользователями собственных обобщенных коллекций. Основополагающим для всех коллекций является понятие пврвчислитвлл, который поддерживается в иеобобщеииых интерфейсах 1Епшоегасог и ХЕпокоегаЬ1е, а также в обобщенных интерфейсах ТЕпптегагог<Т> и 1гпппегаЬ1е<Т>. Перечислитель обеспечивает стаидартиый способ поочередного доступа к элементам коллекции.
Следовательно, ои первчииивт содержимое коллекции. В каждой коллекции должна быть реализована обобщенная или иеобобщеииая форма интерфейса 1ЕппклегаЬ1е, поэтому злемеиты любого класса коллекции должны быть доступны посредством методов, определенных в интерфейсе 1Епшоегасог или ТЕпокоегагог<Т>. Это означает, что, внеся минимальные измеиеиия в код циклического обращения к коллекции одиого типа, его можно использовать для аналогичного обращения к коллекции другого типа. Любопытно, что для поочередного обращения к содержимому коллекции в цикле гогеасп используется перечислитель. С перечислителем непосредственно связано другое средство, называемое итератором.
Это средство упрощает процесс создания классов коллекций, например специзльиых, поочередное обращение к которым организуется в цикле гогеасп. Итераторы также рассматриваются в этой главе. И последнее замечание: если у вас имеется некоторый опыт программирования иа С++, то вам, вероятно, будет полезно знать, что классы коллекций по своей сути подобны классам стандартной библиотеки шаблонов (Бгапдагб Тешр!асе Е!Ьгагу — БТС), определеииой в С++.