Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 18.07.2007, 19:54   #1
HelloZAPOR
 
Аватар для HelloZAPOR
 
Регистрация: 15.07.2007
Сообщений: 9
Репутация: 10
По умолчанию Загрузка ЦП

Как узнать загрузку ЦП в процентах? Выложите пожалуйста код.
HelloZAPOR вне форума   Ответить с цитированием
Старый 18.07.2007, 23:59   #2
KORT
Вот я и
Участник клуба
 
Аватар для KORT
 
Регистрация: 07.04.2007
Адрес: Дом, милый ДОМ
Сообщений: 501
Репутация: 99

icq: stayl1987@mail.ru
skype: stkort
По умолчанию

Цитата:
Сообщение от HelloZAPOR Посмотреть сообщение
Как узнать загрузку ЦП в процентах? Выложите пожалуйста код.
Расшифруй абривиатуру ЦП. Я что слов не найдуууууууу.....
__________________
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума   Ответить с цитированием
Старый 19.07.2007, 00:26   #3
UnD)eaD)Snake
ФорумчанинФорумчанин
 
Аватар для UnD)eaD)Snake
 
Регистрация: 07.07.2007
Сообщений: 241
Репутация: 40
По умолчанию

центральный процессор
UnD)eaD)Snake вне форума   Ответить с цитированием
Старый 19.07.2007, 09:56   #4
_SERGEYX_
Профессионал
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Адрес: г. Витебск
Сообщений: 1,517
Репутация: 437

icq: 375449564
По умолчанию

Как узнать загрузку процессора (NT – 2000 - XP)
--------------------------
Код:
const
  SystemBasicInformation = 0;
  SystemPerformanceInformation = 2;
  SystemTimeInformation = 3;

type
  TPDWord = ^DWORD;

  TSystem_Basic_Information = packed record
    dwUnknown1: DWORD;
    uKeMaximumIncrement: ULONG;
    uPageSize: ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage: ULONG;
    uMmHighestPhysicalPage: ULONG;
    uAllocationGranularity: ULONG;
    pLowestUserAddress: Pointer;
    pMmHighestUserAddress: Pointer;
    uKeActiveProcessors: ULONG;
    bKeNumberProcessors: byte;
    bUnknown2: byte;
    wUnknown3: word;
  end;

type
  TSystem_Performance_Information = packed record
    liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}
    dwSpare: array[0..75] of DWORD;
  end;

type
  TSystem_Time_Information = packed record
    liKeBootTime: LARGE_INTEGER;
    liKeSystemTime: LARGE_INTEGER;
    liExpTimeZoneBias: LARGE_INTEGER;
    uCurrentTimeZoneId: ULONG;
    dwReserved: DWORD;
  end;

var
  NtQuerySystemInformation: function(infoClass: DWORD;
    buffer: Pointer;
    bufSize: DWORD;
    returnSize: TPDword): DWORD; stdcall = nil;

  liOldIdleTime: LARGE_INTEGER = ();
  liOldSystemTime: LARGE_INTEGER = ();

function Li2Double(x: LARGE_INTEGER): Double;
begin
  Result := x.HighPart * 4.294967296E9 + x.LowPart
end;

procedure GetCPUUsage;
var
  SysBaseInfo: TSystem_Basic_Information;
  SysPerfInfo: TSystem_Performance_Information;
  SysTimeInfo: TSystem_Time_Information;
  status: Longint; {long}
  dbSystemTime: Double;
  dbIdleTime: Double;

  bLoopAborted: boolean;

begin
  if @NtQuerySystemInformation = nil then
    NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
      'NtQuerySystemInformation');

  // get number of processors in the system

  status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo,
    SizeOf(SysBaseInfo), nil);
  if status <> 0 then
    Exit;

  // Show some information
  with SysBaseInfo do
  begin
    ShowMessage(
      Format('uKeMaximumIncrement: %d'#13'uPageSize: %d'#13   +
      'uMmNumberOfPhysicalPages: %d' + #13 + 'uMmLowestPhysicalPage: %d' + #13 +
      'uMmHighestPhysicalPage: %d' + #13 + 'uAllocationGranularity: %d'#13 +
      'uKeActiveProcessors: %d'#13'bKeNumberProcessors: %d'  ,
      [uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages,
      uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity,
        uKeActiveProcessors, bKeNumberProcessors]));
  end;

  bLoopAborted := False;

  while not bLoopAborted do
  begin

    // get new system time
    status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo,
      SizeOf(SysTimeInfo), 0);
    if status <> 0 then
      Exit;

    // get new CPU's idle time
    status := NtQuerySystemInformation(SystemPerformanceInformation,
      @SysPerfInfo, SizeOf(SysPerfInfo), nil);
    if status <> 0 then
      Exit;

    // if it's a first call - skip it
    if (liOldIdleTime.QuadPart <> 0) then
    begin

      // CurrentValue = NewValue - OldValue
      dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) -
        Li2Double(liOldIdleTime);
      dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) -
        Li2Double(liOldSystemTime);

      // CurrentCpuIdle = IdleTime / SystemTime
      dbIdleTime := dbIdleTime / dbSystemTime;

      // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
      dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors
        + 0.5;

      // Show Percentage
      Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %', dbIdleTime);

      Application.ProcessMessages;

      // Abort if user pressed ESC or Application is terminated
      bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or
        Application.Terminated;

    end;

    // store new CPU's idle and system time
    liOldIdleTime := SysPerfInfo.liIdleTime;
    liOldSystemTime := SysTimeInfo.liKeSystemTime;

    // wait one second
    Sleep(1000);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetCPUUsage
end;
_SERGEYX_ вне форума   Ответить с цитированием
Старый 19.07.2007, 10:52   #5
KORT
Вот я и
Участник клуба
 
Аватар для KORT
 
Регистрация: 07.04.2007
Адрес: Дом, милый ДОМ
Сообщений: 501
Репутация: 99

icq: stayl1987@mail.ru
skype: stkort
По умолчанию

Цитата:
Сообщение от UnD)eaD)Snake Посмотреть сообщение
центральный процессор
Спасибо, ДРУГ! Я занесу абривиатуру и расшифровку к ней в словарик. чтобы в дальшейшем не спрашвать всякую ерунду.....
__________________
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума   Ответить с цитированием
Старый 19.07.2007, 12:49   #6
Alex21
With best regards
Профессионал
 
Регистрация: 20.04.2007
Адрес: Москва
Сообщений: 1,448
Репутация: 531
По умолчанию

Здесь отвечал уже посмотри:
http://programmersforum.ru/showpost....93&postcount=2
__________________
Life is too short, play more...
Как правильно задавать вопросы
Alex21 вне форума   Ответить с цитированием
Старый 19.07.2007, 23:12   #7
HelloZAPOR
 
Аватар для HelloZAPOR
 
Регистрация: 15.07.2007
Сообщений: 9
Репутация: 10
По умолчанию

Спасибо большое, всё работает.
HelloZAPOR вне форума   Ответить с цитированием
Старый 05.11.2007, 16:43   #8
PoReX
 
Регистрация: 05.11.2007
Сообщений: 3
Репутация: 10
По умолчанию

А есть другой вариант кода?
или как сделать чтобы при завершении или запуске, также при перетаскивании окна приложение не делало паузу(зависало на 1 сек (в коде sleep(1000)) при уменьшении этого значения все норм, но уменьшается и частота обновления показаний, а нужна независимая регулировка частоты обновления!
PoReX вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка Witaliy PHP 3 12.07.2008 18:06
Загрузка стримом snakesoft Работа с сетью в Delphi 6 10.12.2007 22:24
Загрузка UnD)eaD)Snake Общие вопросы Delphi 10 19.08.2007 11:24
Загрузка ОЗУ HelloZAPOR Общие вопросы Delphi 2 20.07.2007 18:40
Загрузка DLL Hollander Общие вопросы Delphi 3 21.05.2007 20:19


03:52.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.