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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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