在delphi中实现对cpu占用和内存资源的占用的监控问题

Description of your first forum.

在delphi中实现对cpu占用和内存资源的占用的监控问题

帖子ChianGirl » 星期二, 2004年7月6日 16:47


我想编个能够监控pc机的运行状态的程序,想问一下,哪些系统函数可以直接引用的。
 
 
 

在delphi中实现对cpu占用和内存资源的占用的监控问题

帖子Avalon » 星期二, 2004年7月6日 17:01


摘下两段代码
function GetCPUVendor : TVendor; assembler; register;
asm
 PUSH    EBX {Save affected register}
 PUSH    EDI
 MOV     EDI,EAX {@Result (TVendor)}
 MOV     EAX,0
 DW      $A20F {CPUID Command}
 MOV     EAX,EBX
 XCHG EBX,ECX     {save ECX result}
 MOV ECX,4
@1:
 STOSB
 SHR     EAX,8
 LOOP    @1
 MOV     EAX,EDX
 MOV ECX,4
@2:
 STOSB
 SHR     EAX,8
 LOOP    @2
 MOV     EAX,EBX
 MOV ECX,4
@3:
 STOSB
 SHR     EAX,8
 LOOP    @3
 POP     EDI {Restore registers}
 POP     EBX
end;



//获得CPU主频
function GetCPUSpeed: Double;
const
 DelayTime = 500; // measure Time in ms
var
 TimerHi, TimerLo: DWORD;
 PriorityClass, Priority: Integer;
begin
 PriorityClass := GetPriorityClass(GetCurrentProcess);
 Priority := GetThreadPriority(GetCurrentThread);

 SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
 SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

 Sleep(10);
 asm
   dw 310Fh // rdtsc
   mov TimerLo, eax
   mov TimerHi, edx
 end;
 Sleep(DelayTime);
 asm
   dw 310Fh // rdtsc
   sub eax, TimerLo
   sbb edx, TimerHi
   mov TimerLo, eax
   mov TimerHi, edx
 end;

 SetThreadPriority(GetCurrentThread, Priority);
 SetPriorityClass(GetCurrentProcess, PriorityClass);

 Result := TimerLo / (1000.0 * DelayTime);
end;

得到总内存和可利用内存
procedure TForm1.Button1Click(Sender: TObject);
var
 memory:TMemoryStatus;
begin
 memory.dwLength:=sizeof(memory);
 GlobalMemoryStatus(memory);
 ShowMessage('Total RAM / total memory: '+inttostr(memory.dwTotalPhys)+' Bytes');
 ShowMessage('Freie RAM / available memory: '+inttostr(memory.dwavailPhys)+' Bytes');
end;
 
 
 

在delphi中实现对cpu占用和内存资源的占用的监控问题

帖子ChianGirl » 星期三, 2004年7月7日 09:01


有没有对cpu资源占用的函数可以利用啊?
谢谢你的回复,我会把积分加给你的。
 
 
 

在delphi中实现对cpu占用和内存资源的占用的监控问题

帖子ChianGirl » 星期三, 2004年7月7日 09:02


接受答案了.