Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2007, 19:22   #1
Naik
Новичок
Джуниор
 
Регистрация: 17.06.2007
Сообщений: 2
По умолчанию Нужно создать программку, отображающую текущую загрузку процессора.

Вобщем такая проблемка.
Нужно создать программку, отображающую текущую загрузку процессора.
Я Нанес на форму кнопку, таймер, Gauge(шкала загрузки в разделе Samples) и написал код.
Но ничего не получилось.
Так как я профан в Делфи прошу помочь. Что я сделал не так и как ее заставить работать.
Код приведен ниже.
Заранее спасибо.
Код:
unit Unit1;
interface
uses
  registry, Windows, SysUtils, Forms, Gauges, Classes, Controls, ExtCtrls,
    StdCtrls;
type
  TForm1 = class(TForm)
    Gauge1: TGauge;
    Timer1: TTimer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  def: string;
  reg: TRegistry;
  Buffer: array[0..1000] of integer;
begin
  //-------------------------------
  reg := TRegistry.Create;
  reg.RootKey := HKEY_DYN_DATA;
  def := '';
  if reg.OpenKey('PerfStats\StartStat', false) = TRUE then
  begin
    reg.ReadBinaryData('KERNEL\CPUusage', buffer, 1000);
  end;
  reg.CloseKey;
  Timer1.Enabled := true;
end;
//-------------------------------
procedure TForm1.Timer1Timer(Sender: TObject);
var
  def: string;
  reg: TRegistry;
  B: array[1..4] of integer;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_DYN_DATA;
  def := '';
  if reg.OpenKey('PerfStats\StatData', false) = TRUE then
  begin
    reg.ReadBinaryData('KERNEL\CPUusage', b, 4);
  end;
  reg.CloseKey;
  Gauge1.Progress := b[1];
  Application.ProcessMessages;
  //-------------------------------
end;
end.

Последний раз редактировалось rpy3uH; 29.07.2008 в 14:21.
Naik вне форума Ответить с цитированием
Старый 17.06.2007, 22:14   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вот что-то похожее делал
Вложения
Тип файла: rar Memory.rar (12.1 Кб, 181 просмотров)
Alex21 вне форума Ответить с цитированием
Старый 18.06.2007, 16:41   #3
Naik
Новичок
Джуниор
 
Регистрация: 17.06.2007
Сообщений: 2
По умолчанию

Спасибо, но маленько не то. Попробую разобраться.
Naik вне форума Ответить с цитированием
Старый 19.06.2007, 07:51   #4
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Код:
function GetCPUSpeed: Double;
  const DelayTime = 500;
var TimerHi : DWORD;
     TimerLo : DWORD;
     PriorityClass : Integer;
     Priority : Integer;
begin
  PriorityClass := GetPriorityClass(GetCurrentProcess);
  Priority := GetThreadPriority(GetCurrentThread);
  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
  Sleep(10);
  asm
    DW 310Fh // rdtsc
    MOV TimerLo, EAX
    MOV TimerHi, EDX
  end;
  Sleep(DelayTime);
  asm 
    DW 310Fh // rdtsc 
    SUB EAX, TimerLo
    SBB EDX, TimerHi 
    MOV TimerLo, EAX 
    MOV TimerHi, EDX 
  end;
  SetThreadPriority(GetCurrentThread, Priority); 
  SetPriorityClass(GetCurrentProcess, PriorityClass); 
  Result := TimerLo / (1000.0 * DelayTime); 
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Label1.Caption:=Format('CPU speed: %f MHz', [GetCPUSpeed]);
end;
300 с лишним сообщений...
А тэг "Код" так применять и не научились?
Или это - принципиальная позиция?
Я тоже принципиален. Получите штраф.
Берите пример с новичка - топикстартера, у него трудностей в этом вопросе не возникло.

Последний раз редактировалось mihali4; 02.03.2009 в 23:15. Причина: Неправильное оформление кода
Трофимов Александр вне форума Ответить с цитированием
Старый 02.03.2009, 22:13   #5
CraZZy RabbIt
Форумчанин
 
Регистрация: 16.02.2009
Сообщений: 172
По умолчанию

Цитата:
Сообщение от Трофимов Александр Посмотреть сообщение
function GetCPUSpeed: Double;
вы привели код определяюший не загрузку процессора,а его тактовую частоту.
не запутывайте людей !

Уже не "Новичок". Уже пора прочитать правила.
Да и вообще - понимать никчемность полного цитирования такого объемного сообщения.

Последний раз редактировалось mihali4; 02.03.2009 в 23:08. Причина: Неоправданное цитирование
CraZZy RabbIt вне форума Ответить с цитированием
Старый 02.03.2009, 23:16   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Можно сделать всё проще. Скачайте модуль AdCpuUsage.zip, подключите его к проге и напишите пару строчек кода:
Код:
Uses
   AdCPUUsage;
Procedure TForm1.Timer1Timer(Sender: TObject);
Var
I: Integer;
S: String;
Begin
CollectCPUData;
For I:=0 To GetCPUCount -1 Do
S:=Format('%d%5.2f%',[I,GetCPUUsage(I)*100]);
Delete(S,1,1);
S:=FloatToStr(Round(StrToFloat(S)));
Gauge1.Progress:=StrToInt(S);
End;
Модуль AdCPUUsage разработан специально для этих целей. Если нужно, то можете код оптимизировать.
Всегда рад помочь!

Последний раз редактировалось Terran; 02.03.2009 в 23:21.
Terran вне форума Ответить с цитированием
Старый 03.03.2009, 08:42   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

А можно ещё почитать вот эту статью. там всё подробно написано
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно сделать маленькую программку allfaces Фриланс 4 26.05.2008 05:46
Нужно написать небольшую программку shuraa Фриланс 3 18.02.2008 00:42
Мне нужно создать exe файл. andrey4623 Общие вопросы Delphi 1 14.07.2007 23:22
пишу программку типа Hexредактора(для тренировки). нужно помочь. Alar Общие вопросы Delphi 0 29.10.2006 18:53