Шрифт:
Список множества потоков процесса
Тип класса Process обеспечивает и способ программного получения множества всех потоков, используемых данным потоком в настоящий момент. Множество потоков представляется строго типизованной коллекцией ProcessThreadCollection, которая содержит соответствующий набор отдельных типов ProcessThread. Для примера предположим, что в наше текущее приложение была добавлена следующая вспомогательная статическая функция.
Как видите, свойство Threads типа System.Diagnostics.Process обеспечивает доступ к классу ProcessThreadCollection. Здесь для каждого потока в рамках указанного клиентом процесса выводится назначенный потоку идентификатор ID, время запуска и приоритет. Обновите метод Main программы для запроса у пользователя значения PID процесса так, как показано ниже.
В результате выполнения обновленной программы вы должны получить вывод, подобный показанному на рис. 13.4.
Рис. 13.4. Перечень потоков в рамках выполняемого процесса
Кроме членов Id, StartTime и PriorityLevel, тип ProcessThread имеет и другие члены, которые могут представлять интерес. Некоторые из таких членов приведены в табл. 13.3.
Таблица 13.3. Подборка членов типа ProcessThread
Член | Описание |
---|---|
BasePriority | Читает значение базового приоритета потока |
CurrentPriority | Читает значение текущего приоритета потока |
Id | Читает уникальный идентификатор потока |
IdealProcessor | Задает предпочтительный процессор для выполнения данного потока |
PriorityLevel | Читает или задает уровень приоритета для данного потока |
ProcessorAffinity | Задает процессоры, на которых может выполняться ассоциированный поток |
StartAddress | Читает адрес в памяти для функции, которая вызывалась операционной системой для запуска данного потока |
StartTime | Читает информацию о времени запуска данного потока операционной системой |
ThreadState | Читает информацию о текущем состоянии потока |
TotalProcessorTime | Читает общую оценку времени, в течение которого данный поток использовал процессор |
WaitReason | Читает информацию о причине, по которой поток находится в ожидании |
Перед тем как двигаться дальше, следует заметить, что тип ProcessThread не является тем элементом, который можно использовать для создания, остановки или ликвидации потоков в рамках платформы .NET. Тип ProcessThread является средством получения диагностической информации об активных потоках Win32 в рамках выполняющихся процессов. То, как строить многопоточные приложения с помощью пространства имен System.Threading, мы с вами выясним в главе 14.
Информация о наборе модулей процесса
Теперь выясним, как выполнить цикл по всем модулям, загруженным в рамках данного процесса. Напомним, что модуль – это общее название, используемое для обозначения *.dll (или *.exe). При доступе к ProcessModuleCollection с помощью свойства Process.Module вы получаете перечень всех модулей, задействованных в рамках соответствующего процесса – модулей .NET, модулей COM и традиционных библиотек C. Рассмотрите следующую вспомогательную функцию, которая перечислит модули конкретного процесса, заданного с помощью PID.