- •6. Лабораторная работа № 7
- •6.1. Общие методические указания по выполнению лабораторной работы
- •6.2. Теоретические сведения
- •6.2.1. Общие сведения о процессах и потоках
- •6.2.2. Диспетчеризация задач с использованием
- •6.2.3. Описание свойств и методов элемента управления ListView
- •6.2.4. Получение информации о процессах и потоках
- •6.2.5. Изменение базового приоритета процесса
- •6.3.Задание на лабораторную работу
- •6.4. Проверка правильности функционирования созданной программы
- •6.5. Отчет по лабораторной работе
6.2.5. Изменение базового приоритета процесса
Изменить базовый приоритет процесса можно с помощью свойства PriorityClass типа System::Diagnostics::Process. Но приоритет может меняться по базовым уровням. Эти уровни предоставлены в перечислении ProcessPriorityClass.
В таблице 3 представлены члены этого перечисления:
Таблица 3
Имя члена перечисления |
Описание |
Normal |
Указывает, что у процесса нет особых запланированных потребностей. |
Idle |
Указывает, что потоки этого процесса выполняются, только когда система не занята. Примером может служить программа-заставка. Потоки данного процесса выгружаются потоками любых процессов с более высоким приоритетом. |
High |
Указывает, что процесс выполняет срочные задачи, которые должны быть выполнены немедленно, например диалог Task List, который должен быстро отвечать при вызове пользователя, независимо от загрузки операционной системы. Потоки процесса выгружают потоки процессов с нормальными или низкими приоритетами. |
RealTime |
Указывает, что процесс обладает максимально высоким приоритетом. |
BelowNormal |
Указывает, что значение приоритета процесса находится между Idle и Normal. |
AboveNormal |
Указывает, что значение приоритета процесса находится между Normal и High. |
Изменить какой-либо выбранный по щелчку левой кнопкой мыши приоритет можно таким образом:
ProcessPriorityClass Idle = ProcessPriorityClass::Idle;
ProcessPriorityClass BelowNormal = ProcessPriorityClass::BelowNormal;
ProcessPriorityClass Normal = ProcessPriorityClass::Normal;
ProcessPriorityClass AboveNormal = ProcessPriorityClass::AboveNormal;
ProcessPriorityClass High = ProcessPriorityClass::High;
ProcessPriorityClass RealTime = ProcessPriorityClass::RealTime;
for(int i = 0; i< SICount; i++)
{ prstr=SI[i]Text;
array<Process^>^Pk1=Process::GetProcessesByName(prstr);
for(int i=0; i<Pk1Length; i++)
{ Pk1[i] PriorityClass = Idle;}
}
Здесь сначала объявляются и инициализируются переменные типа перечисление (по сути константы), которые затем назначаются в качестве значения свойству PriorityClass.
6.3.Задание на лабораторную работу
В интегрированной среде разработки Visual Studio 2008 написать программу, которая:
Выводит в табличной форме основную информацию (имя, идентификатор, базовый приоритет, количество потоков, дата запуска, класс приоритета, название главного окна процесса) обо всех запущенных в системе процессах. Заголовок и шапка таблицы должны формироваться при создании формы. Вывод текущей информации должен осуществляться по нажатию соответствующей кнопки.
Выводит информацию о количестве запущенных процессов.
Предоставляет возможность изменения базового приоритета выбранного пользователем процесса. Автоматически обновляет данные в таблице запущенных процессов после выполнения изменения приоритета.
Для формирования таблицы следует использовать компонент ListView, который находится на панели элементов Toolbox. Формат итоговой таблицы представлен в таблице 4.
Таблица 4
Имя процесса |
Идентификатор процесса |
Приоритет процесса |
Количество потоков процесса |
Дата запуска |
Класс приоритета |
Название главного окна процесса |
|
|
|
|
|
|
|
В остальном организация интерфейса произвольна.