Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как прочитать 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо