Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_frolkov2( без множества заданий).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
940.13 Кб
Скачать
  1. Управление процессами и потоками

    1. Теоретическая часть по управлению процессами и потоками

Средства Visual Studio для решения задач по управлению процессами и потоками

Процессы – это концепция уровня операционной системы, которая используется для описания набора ресурсов (внешние библиотеки кода и главный поток) и необходимой памяти, используемой выполняющимся приложением. Для каждого загружаемого в память файла *.exe в операционной системе создаётся отдельный изолированный процесс.

Поток - используемый внутри процесса путь выполнения. Первоначальный поток – входная точка для приложения, который содержится в процессе Windows. Главный поток - поток, который создается первым во входной точке процесса. Процессы, в которых содержится единственный главный поток выполнения, изначально являются безопасными к потокам, поскольку в каждый отдельный момент времени доступ к данным приложения в них может получать только один поток.

Типы и классы

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

Process. Предоставляет доступ к локальным и удаленным процессам, а также позволяет запускать и останавливать процессы программным образом.

ProcessModule. Представляет модуль (*.dll или *.ехе), который должен загружаться в определенный процесс.

ProcessModuleCollection. Позволяет создавать строго типизированную коллекцию объектов Process Module.

ProcessStartlnfo. Позволяет указывать набор значений, которые должны использоваться при запуске процесса посредством метода Process.Start().

ProcessThread. Представляет поток внутри определенного процесса. Этот тип применяется для диагностики набора потоков в процессе, но не для ответвления внутри него новых потоков.

ProcessThreadCollection. Позволяет создавать строго типизованную коллекцию объектов ProcessThread.

Класс System.Diagnostics.Process позволяет анализировать процессы, которые выполняются на какой-то определенной машине (локальной или удаленной). В нем есть члены, которые позволяют программно запускать и останавливать процессы, просматривать приоритет процесса, а также получать список активных потоков и/или модулей, которые были загружены в данный процесс.

AppDomain. Представляет домен приложения, являющийся изолированной средой, в которой выполняются приложения.

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

    1. Выполненные задания по управлению процессами и потоками.

Задание 1

Делегаты.

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

Пример делегата. Делегат вызывает метод, к которому он ссылается.

Объявляется делегат StrMod типа string, как показано ниже.

Delegate string StrMod(string str).

Консоль приложения представлена на рисунке 2.1

Рисунок 2.1 – Пример делегата

Листинг задания представлен в приложении 2.

Задание 2

Пример групповой адресации. Это переработанный вариант предыдущего примера, в котором тип значений, возвращаемых методами манипулирования строками, изменен на void, а для возврата измененной строки в вызывающую часть кода служит параметр типа ref. Благодаря этому методы оказываются более приспособленными для групповой адресации.

Листинг для примера групповой адресации представлен в приложении 2.

Задание 3

Данная программа предназначена для отслеживания происходящих событий.

Событие -это автоматическое уведомление о том, что произошло некоторое

действие. Объект, проявляющий интерес к событию,регистрирует обработчик этого события.

При появлении какого-либо события, появится надпись: «Произошло событие».

Листинг для примера события представлен в приложении 2.

Взаимодейтсвие с используемым доменом приложения и перечисление загружаемых сборок

Задание 4

С применением на уровне экземпляра метода GetAssemblies() можно просмотреть все сборки .NET, загруженные в заданный домен приложения. Определим в классе Program новый вспомогательный метод по имени ListAllAssembliesInAppDomain(), который будет получать список всех загружаемых сборок и отображать дружественное имя и номер версии каждой из них в окне консоли.

Консоль этого задания представленная на рисунке 2.4

Рисунок 2.4 – Пример домена

Листинг задания представлен в приложении 2.

Создание новых доменов приложения

Задание 5

Один процесс способен обслуживать множество доменов приложений постредством статического метода AppDomain.CreateDomain().

Пример создания специальных доменов на лету представлен в консоли на рисунке 2.5.

Рисунок 2.5 – Консоль приложения для примера доменов на лету

Листинг задания представлен в приложении 2.

Перечисление выполняемых процессов и изучение набора потоков процесса.

Задание 6

Помимо полного списка всех выполняющихся процессов, статический метод Process.GetProcessById() позволяет получать информацию и по конкретному объекту Process за счет указания ассоциируемого с ним идентификатора(PID). В случае запроса несуществующего PID генерируется исключение ArgumentException. При запуске приложения, можно вводить PID-идентификатор любого процесса на машине и просматривать внутри него потоки

Консоль данного задания представленна на рисунке 2.6

Рисунок 2.7 – Консоль для перечисления процессов и набора потоков

Листинг задания представлен в приложении 2.

Изучение набора модулей процесса

Задание 7

При получении доступа к ProcessModuleCollection через свойство Process.Modules можно извлечь список всех модулей, которые обслуживаются внутри процесса .Net и .COM. В данном примере мы в коде программы указали PID процесса ProcessModuleCollection 4084 и посмотрели, какие модули *.dll используются для данного приложения.

Пример набора модулей процесса представлен в консольном приложении на рисунке 2.7.

Рисунок 2.7 – Консоль для примера набора модулей процесса

Запуск и остановка процессов программным образом

Задание 8

В этом приложении методы Start() и Kill() позволяют соответственно, программно запускать и завершать процесс. В качестве примера создадим вспомогательный метод StartAndKillProcess().

Рисунок 2.8 – Консоль для запуска и остановки процесса

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]