![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
> и сколько памяти она занимает в определенный момент времени?
Какой памяти ?