Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.10.2010, 10:13
maxtreamal maxtreamal вне форума
Прохожий
 
Регистрация: 04.10.2010
Сообщения: 1
Репутация: 10
По умолчанию посчитать % загрузки процессора для процесса

Доброго времени суток. Нужна помощь уважаемых форумчан.
Есть два списка процессов, полученных с помощью ToolHelp API и PSAPI. Подскажите как на основе этих списков получить процент загрузки процессора для каждого процесса?
ЗЫ: win7, delphi 7

Код:
unit lab1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TlHelp32, psapi, ExtCtrls;

type
  TGlavnayaForma = class(TForm)
    Zagolovok: TLabel;
    VIXOD: TButton;
    NadpisTool: TLabel;
    NadpisPSAPI: TLabel;
    LaunchPR: TButton;
    tlhwind: TMemo;
    psapiwind: TMemo;
    KolvoTLH: TLabel;
    KolvoPSAPI: TLabel;
    Kolvopr1: TEdit;
    kolvopr2: TEdit;
    Refr: TTimer;
    Stop: TButton;
    wait01: TRadioButton;
    wait1: TRadioButton;
    wait05: TRadioButton;
    wait5: TRadioButton;
    NadpZAD: TLabel;
    procedure VIXODClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);
    procedure RefrTimer(Sender: TObject);
    procedure LaunchPRClick(Sender: TObject);
    procedure StopClick(Sender: TObject);
    procedure wait1Click(Sender: TObject);
    procedure wait01Click(Sender: TObject);
    procedure wait05Click(Sender: TObject);
    procedure wait5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  GlavnayaForma: TGlavnayaForma;

implementation

{$R *.dfm}

procedure GetProcessList (var line1,line2:TStrings);
var
  pe:TprocessEntry32;
  ph,snap:Thandle;
  mh:Hmodule;
  procs:array[0..$fff] of dword;
  cnt,cnt1,count,cm: cardinal;
  i:integer;
  ModName:array [0..max_path] of char;
begin
  cnt:=0;
  cnt1:=0;
  line1.Clear;
  line2.Clear;
  //èñïîëüçóåì Tool Help API
  snap:=CreateToolHelp32Snapshot(th32cs_snapprocess,0);
  if integer(snap)=-1 then
  begin
    exit;
  end
  else
  begin
    pe.dwSize:=sizeof(pe);
    If process32First(snap,pe) then
      repeat
        line1.add(string(pe.szExeFile));
        cnt:=cnt+1;
      until not process32Next(snap,pe);
  end;
  GlavnayaForma.Kolvopr1.Text:=FloatTOStr(cnt);
  //èñïîëüçóåì PSAPI
      if not EnumProcesses(@procs, sizeof(procs), count) then
    begin
      exit;
    end;
    for i := 0 to count div 4 - 1 do
    begin
      ph := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        false, procs[i]);
      if ph > 0 then
      begin
        EnumProcessModules(ph, @mh, 4, cm);
        GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
        line2.Add(ExtractFilename(string(ModName)));
        CloseHandle(ph);
      end;
      cnt1:=cnt1+1;
    end;
    GlavnayaForma.kolvopr2.Text:=FloatToStr(cnt1);
end;


procedure TGlavnayaForma.VIXODClick(Sender: TObject);
begin
  close;
end;



procedure TGlavnayaForma.FormCreate(Sender: TObject);

begin
  tlhwind.Clear;
  psapiwind.Clear;
end;

procedure TGlavnayaForma.RefrTimer(Sender: TObject);
var
  tmp1:Tstrings;
  tmp2:TStrings;
begin
  tmp1:=tlhwind.Lines;
  tmp2:=psapiwind.Lines;
  getProcessList(tmp1,tmp2);
end;

procedure TGlavnayaForma.LaunchPRClick(Sender: TObject);
begin
    refr.Enabled:=true;
end;

procedure TGlavnayaForma.StopClick(Sender: TObject);
begin
  refr.Enabled:=false;
end;

procedure TGlavnayaForma.wait1Click(Sender: TObject);
begin
  refr.Interval:=1000;
end;

procedure TGlavnayaForma.wait01Click(Sender: TObject);
begin
  refr.Interval:=100;
end;

procedure TGlavnayaForma.wait05Click(Sender: TObject);
begin
  refr.Interval:=500;
end;

procedure TGlavnayaForma.wait5Click(Sender: TObject);
begin
  refr.Interval:=5000;
end;

end.
Ответить с цитированием
  #2  
Старый 04.10.2010, 14:21
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

http://rouse.drkb.ru/winapi.php#taskmon

Там это есть
Ответить с цитированием
  #3  
Старый 04.10.2010, 18:51
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию

http://delphisources.ru/pages/source...cpu-usage.html
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter