![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
загрузка процессора [D7, XP]
jonin © (2009-02-01 11:33:00)доброго времяни суток, я думаю у многих возникал вопрос по отоброжению загрузки процессора, вот и он взник у меня, дайте пожалуйста код чтобы вывести информацию о загруженности процессора в лейбл например
зарание спасибо
Rouse_ (2009-02-02 15:02:00) [1]Пост №13 был не от автора, просьба к участникам быть сдержаннее, а самому автору зарегистрироваться на форуме во избежании повторения таких провокаций.
Anatoly Podgoretsky (2009-02-02 14:48:00) [2]Удалено модератором
(2009-02-02 14:34:00) [3]Удалено модератором
KSergey (2009-02-02 14:27:00) [4]Удалено модератором
Сергей М. (2009-02-02 14:27:00) [5]Удалено модератором
(2009-02-02 14:24:00) [6]Удалено модератором
clickmaker (2009-02-02 14:00:00) [7]> Почему не сделать это сразу?
может, там настройка типа "не загружать ЦПУ больше ..."
Denis__ (2009-02-02 13:56:00) [8]
> Например, клиентская программа, жрущая много ресурсов,
> может автоматически умерить свои аппетиты,
Почему не сделать это сразу?
DVM (2009-02-02 13:38:00) [9]
> Ega23 © (02.02.09 12:23) [7]
> нафига в клиентской программе нужно значение загрузки CPU?
Редко, но бывает. Например, клиентская программа, жрущая много ресурсов, может автоматически умерить свои аппетиты, если загрузка процессора больше некоторой заданной величины.
DVM (2009-02-02 13:36:00) [10]Небольшое замечание к [5]. Функция сляпана на коленке путем выдирания кусков из другого проекта. Нуждается в доработке. Во-первых, Sleep(5) это костыль, который необходимо убрать, к тому же временную задержку надо сделать больше, во-вторых, желательно проиннициализировать там некоторые переменные иначе возможен некорректный результат.
antonn (2009-02-02 13:13:00) [11]
> Ega23 © (02.02.09 12:23) [7]
Во многих играх есть бенчмарк, меняет ФПС и нагрузку.
Как вариант :)
Ega23 (2009-02-02 12:23:00) [12]
> я думаю у многих возникал вопрос по отоброжению загрузки
> процессора
Я искренне не понимаю: нафига в клиентскойпрограмме нужно значение загрузки CPU?
DVM (2009-02-02 11:57:00) [13]В данном примере замер возможен только двумя последовательными измерениями между которыми должно пройти некоторое время.
Использовать, например, так:
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := floattostr(GetCPuUsage);
end;
DVM (2009-02-02 11:54:00) [14]
> antonn © (02.02.09 01:18) [4]
> А, ну да, в следующий раз буду советовать "нужно написать
> программу".
По крайней мере это будет правильный ответ.
> Другой пример покажешь? :)
unit cpusage;
interface
uses windows, messages;
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 GetCPUUsage: Double;
implementation
//------------------------------------------------------------------------------
function Li2Double(x: LARGE_INTEGER): Double;
begin
Result := x.HighPart * 4.294967296E9 + x.LowPart
end;
//------------------------------------------------------------------------------
function GetCPUUsage: Double;
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');
if @NtQuerySystemInformation = nil then exit;
status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil);
if status <> 0 then exit;
status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0);
if status <> 0 then Exit;
status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);
if status <> 0 then Exit;
liOldIdleTime := SysPerfInfo.liIdleTime;
liOldSystemTime := SysTimeInfo.liKeSystemTime;
sleep(5);
status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0);
if status <> 0 then Exit;
status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);
if status <> 0 then Exit;
dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);
dbIdleTime := dbIdleTime / dbSystemTime;
dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;
result := dbIdleTime;
end;
//------------------------------------------------------------------------------
end.
antonn (2009-02-02 01:18:00) [15]А, ну да, в следующий раз буду советовать "нужно написать программу".
Другой примерпокажешь? :)
DVM (2009-02-01 23:14:00) [16]
> там в середине CPUUsage.zip
Этому примеру пора на свалку истории уже года 2 назад. Не рабочий он в современных ОС. В HKEY_PERFORMANCE_DATA запрещен доступ обычным юзерам. И через WMI тоже по тем же причинам не узнаешь.
antonn (2009-02-01 14:07:00) [17]
>
> jonin (01.02.09 11:33)
http://desksoft.ru/index.php?files&id=2&owner=3там в середине CPUUsage.zip
Anatoly Podgoretsky (2009-02-01 12:12:00) [18]Неправда, у меньшинства, у озабоченых, но код они должны сами писать, для этого надо изучать ВинАПИ