Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

CPU Usage under WinXP SP1   Найти похожие ветки 

 
Nick Nifontov ©   (2003-04-29 13:29) [0]

Hi!

Возникла проблема - невозможно измерить загруженность CPU под WinXP (обязательно должен быть установлен SP1, иначе все работает). В чем проблема?

Кто чем может помочь?

Вот код, который я использую для замера на NT/2000/XP.

function GetProcessorTime : int64;
type
TPerfDataBlock = packed record
signature : array [0..3] of wchar;
littleEndian : cardinal;
version : cardinal;
revision : cardinal;
totalByteLength : cardinal;
headerLength : cardinal;
numObjectTypes : integer;
defaultObject : cardinal;
systemTime : TSystemTime;
perfTime : comp;
perfFreq : comp;
perfTime100nSec : comp;
systemNameLength : cardinal;
systemnameOffset : cardinal;
end;
TPerfObjectType = packed record
totalByteLength : cardinal;
definitionLength : cardinal;
headerLength : cardinal;
objectNameTitleIndex : cardinal;
objectNameTitle : PWideChar;
objectHelpTitleIndex : cardinal;
objectHelpTitle : PWideChar;
detailLevel : cardinal;
numCounters : integer;
defaultCounter : integer;
numInstances : integer;
codePage : cardinal;
perfTime : comp;
perfFreq : comp;
end;
TPerfCounterDefinition = packed record
byteLength : cardinal;
counterNameTitleIndex : cardinal;
counterNameTitle : PWideChar;
counterHelpTitleIndex : cardinal;
counterHelpTitle : PWideChar;
defaultScale : integer;
defaultLevel : cardinal;
counterType : cardinal;
counterSize : cardinal;
counterOffset : cardinal;
end;
TPerfInstanceDefinition = packed record
byteLength : cardinal;
parentObjectTitleIndex : cardinal;
parentObjectInstance : cardinal;
uniqueID : integer;
nameOffset : cardinal;
nameLength : cardinal;
end;
var
c1,c2,c3:cardinal;
i1,i2:integer;
perfDataBlock:^TPerfDataBlock;
perfObjectType:^TPerfObjectType;
perfCounterDef:^TPerfCounterDefinition;
perfInstanceDef:^TPerfInstanceDefinition;
begin
result:=0;
perfDataBlock:=nil;
try
c1:=$10000;
while true do begin
ReallocMem(perfDataBlock, c1);
c2:=c1;
case RegQueryValueEx(HKEY_PERFORMANCE_DATA,"238",
nil,@c3,pointer(perfDataBlock),@c2) of
ERROR_MORE_DATA: c1:=c1*2;
ERROR_SUCCESS: break;
else exit;
end;
end;
perfObjectType:=pointer(cardinal(perfDataBlock)+perfDataBlock^.headerLength);
for i1:=0 to perfDataBlock^.numObjectTypes-1 do begin
if perfObjectType^.objectNameTitleIndex=238 then begin // 238 -> "Processor"
perfCounterDef:=pointer(cardinal(perfObjectType)+perfObjectType^.headerLength);
for i2:=0 to perfObjectType^.numCounters-1 do begin
if perfCounterDef^.counterNameTitleIndex=6 then begin // 6 -> "% Processor Time"
perfInstanceDef:=pointer(cardinal(perfObjectType)+perfObjectType^.definitionLength);
result:=PInt64(cardinal(perfInstanceDef)+perfInstanceDef^.byteLength+perfCounterDef^.counterOffset)^;
break;
end;
inc(perfCounterDef);
end;
break;
end;
perfObjectType:=pointer(cardinal(perfObjectType)+perfObjectType^.totalByteLength);
end;
finally
FreeMem(perfDataBlock);
end;
end;

var
LastTickCount:cardinal=0;
LastProcessorTime:int64=0;

function GetProcessorUsage : double;
var
tickCount:cardinal;
processorTime:int64;
begin
result:=0;
tickCount:=GetTickCount;
processorTime:=GetProcessorTime;
if (LastTickCount<>0) and (tickCount<>LastTickCount) then
result:=100-((processorTime-LastProcessorTime) div 100)/(tickCount-LastTickCount);
LastTickCount:=tickCount;
LastProcessorTime:=processorTime;
end;

P.S. Ссори за размер письма.
P.S.2 Помогите, очень надо.



With respect,
Nick Nifontov.


 
PGM ©   (2003-04-30 10:17) [1]

Вероятно в SP1. Помнится в MS уже что-то исправили. Утверждают приблизительно следующее - на некоторых(!) машинах некоторые(!) приложения после установки SP1 начинают работать в N раз медленнее. Возможно, что и эта проблема как-то связана. Посмотри на их сайте, там есть заплатка. Может поможет.



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-7391
ОРЕН
2003-06-23 00:35
2003.07.03
chm-справочная система


7-7729
mobilzero
2003-04-21 11:02
2003.07.03
Как научить программу на АСМ работать под виндами?


1-7540
@Ujin
2003-06-22 16:25
2003.07.03
TRegGroups - почему его не видно?


7-7730
Piero
2003-04-07 10:25
2003.07.03
Как закрыть чужой exe-шник из своей проги


8-7551
Oxy
2003-03-18 10:00
2003.07.03
Как проиграть ноту