потоки

Тема в разделе "Delphi - Система", создана пользователем Sliva, 26 май 2006.

Статус темы:
Закрыта.
  1. Sliva

    Sliva Гость

    Посмотрите, пожалуйста - все ли я верно делаю. У меня задача - вывести информацию о владельцах самого большого количества блоков.
    Вот код:
    Код (Text):
    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;
    Тут что-то не так, потому что зацикливается программа
     
  2. Barmutik

    Barmutik Гость

    Оно не виснет ... оно столько работает ... вы перебираете все выделенные блоки .. а их там Оооооооочень много ...
     
  3. Sliva

    Sliva Гость

    Это что же получается, что я не правильно считаю???? Т.е. задача написана неверно?
     
  4. Barmutik

    Barmutik Гость

    Просто не совсем что Вам надо сделать... а таким способом пока Вы пробегаетесь по всем выделнным сегментам в куче .. занимает вагон времени .. с тележкой ...
     
  5. Sliva

    Sliva Гость

    А как можно по-другому? :blink:
     
  6. Barmutik

    Barmutik Гость

    Как стоит задача полностью?

    Потому что Вы написали о владельце самого большого количества блока .. а саим ищите у каждого процеса максимального размера выделынный блок ...
     
  7. Sliva

    Sliva Гость

    Выдать информацию о владельцах самого большого числа блоков :blink:
     
  8. Sliva

    Sliva Гость

    Help me! Barmutik, посмотрите, пожалуйста ;))))
     
  9. Sliva

    Sliva Гость

    Я разобралась!!!!!!!! ;)
     
  10. Barmutik

    Barmutik Гость

    Ну я рад что всё получилось ... а то я только собрался начать пробовать что там у Вас не так .. Ну и в чём была проблема ?
     
  11. Sliva

    Sliva Гость

    Просмотр нужно вести по-другому :)
    Но задачу приняли, сказав, что так тоже можно, но излишне каждый раз заходить в цикл
    Repeat
    .....
    until not Process32Next(Snap, proc);
     
  12. Barmutik

    Barmutik Гость

    Ясно .. главное что приняли :)
     
Загрузка...
Похожие Темы - потоки
  1. Mady
    Ответов:
    3
    Просмотров:
    1.474
  2. 203
    Ответов:
    4
    Просмотров:
    1.751
  3. Senset
    Ответов:
    0
    Просмотров:
    2.330
Статус темы:
Закрыта.

Поделиться этой страницей