![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как прочитать KERNEL\CPUUsage [Delphi, Windows]
Igit © (2003-09-01 11:30:00)Никак не могу прочитать из
"HKEY_DYN_DATA\PerfStats\StatData" раздела значение парамтра "KERNEL\CPUUsage"... пробовал по всякому, но никак не получается :(
savva (2003-09-01 17:02:00) [1]если без тонкостей - то верно.
когда ты обзываешь переменную типа указатель - то она указывает неизвестно куда.. отсюда все проблемы
Igit (2003-09-01 16:49:00) [2]2savva © (01.09.03 15:38) [3]
Спасибо! но что-то я не понял в чем разница, наверно я ошибаюсь на счет pdword=@dword... или... когда задаешь переменную типа dword - память сама выделяется, и освобождается при выходе из процедуры, а когда задаешь указатель, то нужно вручную выделять и освобождать память под то место, куда он указывает? Я правильно понял?
savva (2003-09-01 15:38:00) [3]а вот это
regtype - зачем тип указатель? сделай его как DWORD а передавай указатель на него. Ну или в твоем случае - надо хоть память под него выделить а потом освободить...
я бы сделал так:
> function GetCPUUsage : string;
> var key:hkey;
> tmp:dword;
> regtype:dword;
> vsize:dword;
> d:dword;
> begin
> vsize:=4;
> d:=0;
> RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StartStat',0,KEY_ALL_ACCESS,key)
> ;
> RegQueryValueEx(key,'KERNEL\CPUUsage',nil, @regtype,@tmp,@vsize) ;
> RegCloseKey(key);
> RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StatData',0,KEY_ALL_ACCESS,key);
>
> RegQueryValueEx(key,'KERNEL\CPUUsage',nil, @regtype,@d,@vsize);
> RegCloseKey(key);
> RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StopStat',0,KEY_ALL_ACCESS,key);
>
> RegQueryValueEx(key,'KERNEL\CPUUsage',nil, @regtype,@tmp,@vsize) ;
> RegCloseKey(key);
> result:=Int2Str(d);
> end;
а вообще: " The lpType parameter can be NULL if the type is not required."
Igit (2003-09-01 15:27:00) [4]млин, что-то у меня фигня какая-то: если эта процедура хоть раз вызывалась, тогда при выходе из программы вылетает ошибка, в
procedure TObj.DoDestroy;
asm
MOV EDX, [EAX].fRefCount
SAR EDX, 1
JZ @@1
JC @@exit
DEC [EAX].fRefCount
STC
@@1: JC @@exit
MOV EDX, [EAX]
CALL dword ptr [EDX + 4]
@@exit:
end;
Igit (2003-09-01 13:43:00) [5]Все, вроде сам разобрался... на апи:
function GetCPUUsage : string;
var key:hkey;
tmp:dword;
regtype:pdword;
vsize:dword;
d:dword;
begin
vsize:=4;
d:=0;
RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StartStat',0,KEY_ALL_ACCESS,key) ;
RegQueryValueEx(key,'KERNEL\CPUUsage',nil,regtype,@tmp,@vsize);
RegCloseKey(key);
RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StatData',0,KEY_ALL_ACCESS,key);
RegQueryValueEx(key,'KERNEL\CPUUsage',nil,regtype,@d,@vsize);
RegCloseKey(key);
RegOpenKeyEx(HKEY_DYN_DATA,'PerfStats\StopStat',0,KEY_ALL_ACCESS,key);
RegQueryValueEx(key,'KERNEL\CPUUsage',nil,regtype,@tmp,@vsize);
RegCloseKey(key);
result:=Int2Str(d);
end;