Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разорёнов 2008 full(Краткий конспект).doc
Скачиваний:
11
Добавлен:
21.04.2019
Размер:
1.33 Mб
Скачать

56 Список процессов

Корпорация Microsoft добавила набор функций под названием ToolHelp API в Windows 3.1, чтобы позволить сторонним разработчикам получить доступ к системной информации, которая ранее была доступна только программистам Microsoft. При создании Windows 95, эти функции перекочевали в новую систему под названием ToolHelp32 API. Операционная система Windows NT c cамого создания содержала средства для получения подобной информации под названием "данные производительности". Интерфейс для доступа к данным производительности был крайне запутанным и неудобным (справедливости ради надо отметить, что начиная с Windows NT 4.0, Microsoft предоставляет библиотеку Performance Data Helper, значительно облегчающую получение данных производительности; мы воспользуемся этой библиотекой при реализации соответствующего метода перечисления процессов). Говорят, команда Windows NT долгое время сопротивлялась включению ToolHelp32 API в систему, тем не менее, начиная с Windows 2000, ToolHelp32 API присутствует и в этой операционной системе.

Используя ToolHelp32 API, мы сначала создаем моментальный снимок (snapshot) списка процессов с помощью функции CreateToolhelp32Snapshot, а затем проходим по списку используя функции Process32First и Process32Next. Структура PROCESSENTRY32, заполняемая этими функциями, содержит всю необходимую информацию.

HANDLE hShap;

hShap = CreateToolhelp32ShapShot(…);

PROCESSENTRY32 pl;

PROCESS32First (hShap, &pl)

{

//вывод

}

while(Process32Next(hShap, &pl)

Перед вызовом функций Process32First и Process32Next мы должны инициализировать поле dwSize структуры PROCESSENTRY32 таким образом, чтобы оно содержало размер структуры. Функции в свою очередь заносят в это поле количество байтов, записанных в структуру. Необходимо сравнивать это значение со смещением поля szExeFile в структуре, чтобы определить, было ли заполнено имя процесса.

57 Время выполнения процесса

BOOL GetProcessTimes(

HANDLE hProcess, //описатель процесса

PFILETIME pftCreationTime, //Время создания

PFILETIME pftExitTime, // Время завершения

PFILETIME pftKernelTime, // Время выполнения ядра

PFILETIME pftUserTime); // Время выполнения User

GetProcessTimes возвращает временные параметры, суммированные по всем потокам (даже уже завершенным) в указанном процессе.

Время coздания (creation time) Абсолютная величина, выраженная в интервалах по 100 нс. Отсчитывается с полуночи 1  января 1601 года по Гринвичу до момента создания процесса

Время завершении (exit time) Абсолютная величина, выраженная в интервалах по 100 нс Отсчитывается с полуночи 1 января 1601 года по Гринвичу до момента завершения процесса. Если процесс все еще выполняется, этот показатель имеет неопределенное значение

Время выполнения ядра (kernel time) Относительная величина, выраженная в интервалах по 100 нс. Сообщает время, затраченное этим процессом на выполнение кода операционной системы

Бремя выполнения User (User time) Относительная величина, выраженная в интервалах по 100 нс. Сообщает время, 

затраченное процессом на выполнение кода приложения.