Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
1-7382
Smoke
2003-06-22 21:47
2003.07.03
ListView


9-7284
K@zzel
2003-01-21 16:54
2003.07.03
Просто вопрос


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


1-7458
ASt
2003-06-23 15:01
2003.07.03
Процедура BlockWrite


14-7683
baatars
2003-06-11 23:49
2003.07.03
Стильный AboutBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский