привет)реализую на С++ подобие диспетчера задач на Windows,вроде все хорошо,программа обновляется через определеное время если какието процессы были добавлены(/удалены) то это отображается, но вот почему то не апдейтится колонка CPU,подскажите в чем проблема.вот сам код:
Код:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
int main()
{
for(;;){
// Делаем "снимок" процессов
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FILETIME ftCreation,
ftExit,
ftKernel,
ftUser;
SYSTEMTIME stCreation,
stExit,
stKernel,
stUser;
PROCESSENTRY32 pe;//хранит информацию о найденом процессе
if (Process32First(hSnapshot, &pe)) //Поиск первого процесса в снимке
{
printf("Name process PID CPU Prioritet PID family");
printf("========================== ===== ================ ================ ==========");
do
{
if (!pe.th32ProcessID) continue; // Пропуск [System process]
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE,
pe.th32ProcessID); //Получаем дескриптор процесса
GetProcessTimes(hProcess,&ftCreation,&ftExit,&ftKernel,&ftUser);//получаем системные времена процесса
FileTimeToSystemTime(&ftCreation, &stCreation);
FileTimeToSystemTime(&ftExit, &stExit);
FileTimeToSystemTime(&ftUser, &stUser);
FileTimeToSystemTime(&ftKernel, &stKernel);
// cout<<"creation time -> "<<stCreation.wHour<<" Hour "<<stCreation.wMinute<<" Min "
// <<stCreation.wSecond<<" Sec "<<stCreation.wMilliseconds<<" mSec "<<endl;
int now=0,noq=0;
now=(double)stUser.wHour*3600.0+
(double)stUser.wMinute*60.0+
(double)stUser.wSecond+
(double)stUser.wMilliseconds/1000.0;
noq=(double)stKernel.wHour*3600.0+
(double)stKernel.wMinute*60.0+
(double)stKernel.wSecond+
(double)stKernel.wMilliseconds/1000.0;
// cout<<"->"<<now<<" ->"<<noq<<endl;
int cpu=0;
if(noq!=0)
cpu=(now/noq);
else
cpu=0;
// cout<<"->"<<cpu<<endl;
char cPriority[18];
switch (GetPriorityClass(hProcess)) //Получаем приоритет процесса
{
case HIGH_PRIORITY_CLASS:
strcpy(cPriority, "Vishe srednego");
break;
case IDLE_PRIORITY_CLASS:
strcpy(cPriority, "Nizkii");
break;
case NORMAL_PRIORITY_CLASS:
strcpy(cPriority, "Srednii");
break;
case REALTIME_PRIORITY_CLASS:
strcpy(cPriority, "Realnogo vremeni");
break;
default:
strcpy(cPriority, "Visokii");
}
CloseHandle(hProcess);
//Выводим информацию о процессе
printf("%24s%6d%18d%18s%12d\n", pe.szExeFile, pe.th32ProcessID,
cpu, cPriority, pe.th32ParentProcessID);
}
while (Process32Next(hSnapshot, &pe)); //Поиск следущего процесса в снимке
}
else printf("Ne poluchilos' poluchit' informaciu");
//TerminateProcess(hSnapshot, 0);
CloseHandle(hSnapshot);
Sleep(200);
system("cls");
}
system("PAUSE");
return 0;
getch();
}