потоки

  • Автор темы Автор темы Sliva
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sliva

Посмотрите, пожалуйста - все ли я верно делаю. У меня задача - вывести информацию о владельцах самого большого количества блоков.
Вот код:
Код:
procedure Tfm.btnResClick(Sender: TObject);
var proc: TProcessEntry32;
hp : THeapEntry32;
hpL :THeapList32;
sizemax: integer;
i,j: integer;
snap, curSnap: THandle; // снимки
li: TListItem;
ok: boolean;

begin
proc.dwSize:=SizeOf(proc);  // размер потока
hp.dwSize:=SizeOf(hp); // размер блока
hpL.dwSize:=SizeOf(hpL); // размер кучи
sizemax:= hp.dwSize; // за максимальный размер берем первый
mm.Lines.Clear;

Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); // делаю снимок
if Process32First(Snap, proc) then 
repeat
i:=0;
CurSnap := CreateToolHelp32Snapshot(TH32CS_SNAPHEAPLIST, proc.th32ProcessID);
if Heap32ListFirst(CurSnap, hpL) then	
repeat
if Heap32First(hp, hpL.th32ProcessID, hpL.th32HeapID) then 
repeat
if (hp.dwBlockSize > sizemax) then
begin
sizemax:=hp.dwBlockSize;
inc(i);
break;
end;
until not Heap32Next(hp);

until not Heap32ListNext(CurSnap, hpL);
if i>0 then
begin
memo.Lines.Add('ID владельца '+IntToStr(hp.th32ProcessID));
memo.Lines.Add('ID процесса'+IntToStr(proc.th32ProcessID));
memo.Lines.Add('размер блока '+IntToSTr(hp.dwBlockSize));
end;
CloseHandle(CurSnap);
until not Process32Next(Snap, proc);
CloseHandle(Snap);
end;
Тут что-то не так, потому что зацикливается программа
 
Оно не виснет ... оно столько работает ... вы перебираете все выделенные блоки .. а их там Оооооооочень много ...
 
Это что же получается, что я не правильно считаю???? Т.е. задача написана неверно?
 
Просто не совсем что Вам надо сделать... а таким способом пока Вы пробегаетесь по всем выделнным сегментам в куче .. занимает вагон времени .. с тележкой ...
 
А как можно по-другому? :blink:
 
Как стоит задача полностью?

Потому что Вы написали о владельце самого большого количества блока .. а саим ищите у каждого процеса максимального размера выделынный блок ...
 
Выдать информацию о владельцах самого большого числа блоков :blink:
 
Help me! Barmutik, посмотрите, пожалуйста ;))))
 
Я разобралась!!!!!!!! ;)
 
Ну я рад что всё получилось ... а то я только собрался начать пробовать что там у Вас не так .. Ну и в чём была проблема ?
 
Просмотр нужно вести по-другому :)
Но задачу приняли, сказав, что так тоже можно, но излишне каждый раз заходить в цикл
Repeat
.....
until not Process32Next(Snap, proc);
 
Ясно .. главное что приняли :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab