Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CPU & Memory usege моей проги


Dr.Null ©   (2004-02-25 18:55:00) 

Как используя WinAPI узнать, сколько процессора (т.н. CPU Usage) жрет моя программа (желательно в real/double-формате) и сколько памяти она занимает в определенный момент времени?
Заранее благодарен!


Dr.Null   (2004-02-27 16:22:00) [1]

> Игорь Шевченко

Спасибо


Игорь Шевченко   (2004-02-27 11:03:00) [2]

Определение памяти "которая показывается в Task Manager" для NT-систем:

procedure TfMain.GetMemoryStatus;
var
 VmCounters : VM_COUNTERS;
begin
 if not NT_SUCCESS(NtQueryInformationProcess(GetCurrentProcess, ProcessVmCounters,
     @VmCounters, SizeOf(VmCounters), nil)) then
   Exit;

//    VmCounters.WorkingSetSize - это "Память"
//    VmCounters.PageFileUsage - это "Виртуальная память"

end;


Прототипы функции ищутся в Google


Dr.Null   (2004-02-27 07:35:00) [3]

Удалено модератором
Примечание: Offtopic


VMcL   (2004-02-26 22:53:00) [4]

>>Dr.Null  (26.02.04 22:04) [6]
>у меня в диспетчере задач WinXP Pro на вкладке "процессы" тока одна память отображается

А у меня, к примеру, аж три.

Вид | Выбрать столбцы...
___
LMD


Dr.Null   (2004-02-26 22:04:00) [5]

> Игорь Шевченко ©   (26.02.04 11:09) [5]

Не знаю, у меня в диспетчере задач WinXP Pro на вкладке "процессы" тока одна память отображается. А если имеется ввиду то, что там отображается суммарное значение каких-то двух паметей, то меня интересует именно эта сумма... гы, во загнул-то...


Игорь Шевченко   (2004-02-26 11:09:00) [6]

Dr.Null   (25.02.04 21:46)

Там две памяти отображается - какая интересует ?


Dr.Null   (2004-02-25 22:34:00) [7]

Хм... интересно, а какие из полей структуры PROCESSENTRY32 содержат требуемые мне значения? А вообще, насколько я помню, Toolhelp32 не поддерживается WinNT, хотелось бы что-нибудь более универсальное.


Dr.Null   (2004-02-25 21:46:00) [8]

> Игорь Шевченко ©   (25.02.04 19:12) [1]

Той, использование которой отображается в Task Manager'е

> Klev   (25.02.04 20:55) [2]

Спасибо


Klev   (2004-02-25 20:55:00) [9]

Посмотри исходники Freememory, а точнее к ее плагину fm_systemresource на http://www.hcsoft.spb.ru.

А вот это я написал вроде года 3 назад:

в uses надо добавить tlhelp32.

procedure getinfo;
var hSnap: THandle;
pe32: TProcessEntry32;

prid:cardinal;
modid:cardinal;
treads:cardinal;
parentid :cardinal;
priclass :integer;
memsz:cardinal;
mi: MEMORY_BASIC_INFORMATION;
snap:thandle;
M32     : TModuleEntry32;
allmem:cardinal;
begin
listbox_clear(lb2);

pe32.dwSize := SizeOf(TProcessEntry32);
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

Process32First(hSnap, pe32);
repeat
ну а вместо следующего if тебе следует вставить проверку соответствует ли processid твоего процесса текущему.
if  pids[listbox_getcursel(listbox)]=pe32.th32ProcessID then begin

prid:=pe32.th32ProcessID;
modid:=pe32.th32ModuleID;
treads:=pe32.cntThreads;
parentid:=pe32.th32ParentProcessID;
priclass:=pe32.pcPriClassBase;
end
until not Process32Next(hSnap,pe32);
closehandle(hsnap);

Здесь у тебя уже есть вся информация о процессе.
можешь делать с ней все что угодно
{setdlgitemtext(handle,111,pchar('0x'+inttohex(prid)));
setdlgitemtext(handle,112,pchar('0x'+inttohex(modid)));
setdlgitemtext(handle,113,pchar(inttostr(treads)));
setdlgitemtext(handle,114,pchar('0x'+inttohex(parentid)));
setdlgitemtext(handle,115,pchar(inttostr(priclass)));
if memsz<>0 then setdlgitemtext(handle,116,pchar(inttostr(memsz)));
setdlgitemtext(handle,121,pchar(inttostr(allmem)));}
end;
В этом примере используется listbox в котором уже находится список процессов.
Также использовани некоторые процедуры и функции для управления списками (пр: listbox_addstring).
Все писалось очень быстро, на API, поэтому удобочитаемость отсутствует. Sorry :)
И вообще советую посмотреть про toolhelp в mICROSOFT SDK.


Игорь Шевченко   (2004-02-25 19:12:00) [10]


> и сколько памяти она занимает в определенный момент времени?


Какой памяти ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо