→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Приоритет для процесса 
Автор Сообщение
Начинающий
Аватара пользователя

Регистрация: 27.05.2010
Сообщения: 3
Откуда: Украина, Тернополь
Языки:
Специальность:

Репутация: 0 [ ? ]
Сообщение Приоритет для процесса
Приоритет для процесса
Прошу помощи правильно перероботать программу.

Задание таково:
Написать программу, которая:
Печатает на экран название класса приоритета для процесса, идентификатор которого заданы в командной строке ("низкий" - IDLE_PRIORITY_CLASS, "Нормальный" - NORMAL_PRIORITY_CLASS, "Высокий" - HIGH_PRIORITY_CLASS, "Высочайший" - REALTIME_PRIORITY_CLASS.

У меня есть похожая программа:

которая используя интерфейс системных вызовов API OC Windows, выводит в консоль названия всех процессов запущенных в системе, при этом для каждого процесса выводится его идентификатор (PID) и приоритет. После вывода всех процессов пользователю предоставляется возможность изменить приоритет нужного процесса (входные данные: PID, число, которое определяет класс приоритета (0 - idle priority, 1 - normal priority, 2 - high priority, 3 - realtime priority)) или завершить нужен процесс ( входные данные: PID).

Вот её листинг:

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;

bool GetProcessList(); // Виводить в консоль список процесів
bool KillProcess(DWORD pid); // Завершує вибраний процес
bool SetPriority(DWORD pid, int priority); // Встановлює приорітет для вибраного процесу
int GetPriority(int priority); // Визначає приорітет
void MainMenu(); // Реалізує вивід головного меню


bool main()
{
DWORD pid;
int priority;
int choise;
bool k = true;

while(k)
{
system("cls");
GetProcessList();
MainMenu();
cout<<"Choice: ";
cin>>choise;
if(choise==1)
{
system("cls");
GetProcessList();
continue;
}
else if(choise==2)
{
cout<<"\nPID: ";
cin>>pid;
system("cls");
if(KillProcess(pid))
cout<<"Success!";
else
cout<<"Error!";
Sleep(2000); // Пауза
continue;
}
else if(choise==3)
{
cout<<"\nPID: ";
cin>>pid;
cout<<"Priority(0-IDLE, 1-NORMAL, 2-HIGH, 3-REALTIME): ";
cin>>priority;
system("cls");
if(SetPriority(pid, priority))
cout<<"Success!";
else
cout<<"Error!";
Sleep(2000); // Пауза
continue;
}
else if(choise==4)
{
break;
}
else
{
system("cls");
cout<<"ERROR!";
continue;
}
}
return true;
}

bool GetProcessList()
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32W pe32;
DWORD dwPriorityClass;

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNA PPROCESS, 0);

if(hProcessSnap == INVALID_HANDLE_VALUE)
return false;

pe32.dwSize = sizeof(PROCESSENTRY32W);

if(!Process32FirstW(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap);
return false;
}

while(Process32NextW(hProcessSnap, &pe32))
{
hProcess = GetCurrentProcess();
if(hProcess == NULL)
continue;
else
{
dwPriorityClass = GetPriorityClass(hProcess);
if(!dwPriorityClass)
continue;
}

wprintf( L"\n\nPROCESS NAME: %s", pe32.szExeFile);
wprintf( L"\n PID: %d", pe32.th32ProcessID );
wprintf( L"\n PRIORITY: ");

switch(dwPriorityClass)
{
case 32: printf("normal"); break;
case 64: printf("idle"); break;
case 128: printf("high"); break;
case 256: printf("realtime"); break;
case 16384: printf("below normal"); break;
case 32768: printf("above normal"); break;
}
}
CloseHandle(hProcess);
CloseHandle(hProcessSnap);
return true;
}

bool KillProcess(DWORD pid)
{
DWORD ExitCode;
HANDLE hp;
bool ret = true;

if(pid)
{
hp = OpenProcess(PROCESS_TERMINATE, true, pid);
if(hp)
{
GetExitCodeProcess(hp, &ExitCode);
ret = TerminateProcess(hp, ExitCode);
}
else
return false;
}
else
return false;

CloseHandle(hp);
return ret;
}



bool SetPriority(DWORD pid, int priority)
{
HANDLE hp;
bool ret = true;
if(pid)
{
hp = OpenProcess(PROCESS_SET_INFORMATION , true, pid);
if(hp)
{
ret = SetPriorityClass(hp, GetPriority(priority));
}
else
return false;
}
else
return false;
CloseHandle(hp);
return ret;
}

int GetPriority(int priority)
{
int a;
switch(priority)
{
case 0: a=64; break;
case 1: a=32; break;
case 2: a=128; break;
case 3: a=256; break;
default: a=64;
}
return a;
}



void MainMenu()
{
printf("\n\n======================= ==");
printf("\n1. Refresh");
printf("\n2. Terminate Process");
printf("\n3. Set Priority");
printf("\n4. Exit");
printf("\n========================= \n\n");
}


Если не утрудняетесь, помогите...Буду оч, благодарен...


27.05.2010 19:10
Профиль Отправить email ICQ
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»