Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизCPU & Memory usege моей проги Найти похожие ветки
← →
Dr.Null (2004-02-25 18:55) [0]Как используя WinAPI узнать, сколько процессора (т.н. CPU Usage) жрет моя программа (желательно в real/double-формате) и сколько памяти она занимает в определенный момент времени?
Заранее благодарен!
← →
Игорь Шевченко © (2004-02-25 19:12) [1]
> и сколько памяти она занимает в определенный момент времени?
Какой памяти ?
← →
Klev (2004-02-25 20:55) [2]Посмотри исходники 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.
← →
Dr.Null (2004-02-25 21:46) [3]> Игорь Шевченко © (25.02.04 19:12) [1]
Той, использование которой отображается в Task Manager"е
> Klev (25.02.04 20:55) [2]
Спасибо
← →
Dr.Null (2004-02-25 22:34) [4]Хм... интересно, а какие из полей структуры PROCESSENTRY32 содержат требуемые мне значения? А вообще, насколько я помню, Toolhelp32 не поддерживается WinNT, хотелось бы что-нибудь более универсальное.
← →
Игорь Шевченко © (2004-02-26 11:09) [5]Dr.Null (25.02.04 21:46)
Там две памяти отображается - какая интересует ?
← →
Dr.Null (2004-02-26 22:04) [6]> Игорь Шевченко © (26.02.04 11:09) [5]
Не знаю, у меня в диспетчере задач WinXP Pro на вкладке "процессы" тока одна память отображается. А если имеется ввиду то, что там отображается суммарное значение каких-то двух паметей, то меня интересует именно эта сумма... гы, во загнул-то...
← →
VMcL © (2004-02-26 22:53) [7]>>Dr.Null (26.02.04 22:04) [6]
>у меня в диспетчере задач WinXP Pro на вкладке "процессы" тока одна память отображается
А у меня, к примеру, аж три.
Вид | Выбрать столбцы...
___
LMD
← →
Dr.Null (2004-02-27 07:35) [8]Удалено модератором
Примечание: Offtopic
← →
Игорь Шевченко © (2004-02-27 11:03) [9]Определение памяти "которая показывается в 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 16:22) [10]> Игорь Шевченко
Спасибо
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c