Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Список множества потоков процесса
Список множества потоков процесса
Тип класса Process обеспечивает и способ программного получения множества всех потоков, используемых данным потоком в настоящий момент. Множество потоков представляется строго типизованной коллекцией ProcessThreadCollection, которая содержит соответствующий набор отдельных типов ProcessThread. Для примера предположим, что в наше текущее приложение была добавлена следующая вспомогательная статическая функция.
public static void EnumThreadsForPid(int pID) {
Process theProc;
try {
theProc = Process.GetProcessById(pID);
} catch {
Console.WriteLine("-› Извините, некорректное значение PID!");
Console.WriteLine("************************************n");
return;
}
// Вывод информации для каждого потока указанного процесса.
Console.WriteLine("Это потоки, выполняемые в рамках {0}", theProc.ProcessName);
ProcessThreadCollection theThreads = theProc.Threads;
foreach (ProcessThread pt in theThreads) {
string info = string.Format("-› ID: {0}tBpeмя запуска {1}tПриоритет {2}", pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel);
Console.WriteLine(info);
}
Console.WriteLine("************************************n").
}
Как видите, свойство Threads типа System.Diagnostics.Process обеспечивает доступ к классу ProcessThreadCollection. Здесь для каждого потока в рамках указанного клиентом процесса выводится назначенный потоку идентификатор ID, время запуска и приоритет. Обновите метод Main() программы для запроса у пользователя значения PID процесса так, как показано ниже.
static void Main(string[] args) {
…
// Запрос PID у пользователя и вывод списка активных потоков.
Console.WriteLine("***** Введите значение PID процесса *****");
Console.Write("PID: ");
string pID = Console.ReadLine();
int theProcID = int.Parse(pID);
EnumThreadsForPid(theProcID);
Console.ReadLine();
}
В результате выполнения обновленной программы вы должны получить вывод, подобный показанному на рис. 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.
- Взаимодействие с процессами в рамках платформы .NET
- Сущность процесса миграции
- Достоинства и недостатки потоков
- V Совершенствование процесса
- Использование сервера Yaffil внутри процесса
- Операции с множествами узлов
- 4. Стадии бизнес-процесса взаимодействия с клиентами
- 2.2.2.2 Состояния процесса
- Список основных источников информации
- 1.2 Процесс, контекст процесса и потоки
- Список литературы
- Вытеснение процесса