获取CPU内存磁盘使用情况

获取CPU内存磁盘使用情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
program hardware;
 
{$APPTYPE CONSOLE}
 
{$R *.res}
 
uses
  {$IFDEF mswindows}        Winapi.Windows, {$ENDIF}
  {$IFDEF posix}
  posix.SysStatvfs, {$ENDIF}
  system.Classes,
  System.Math,
  System.SysUtils;
 
var
  Times: TThread.TSystemTimes;
 
function CPUUsage: string;
begin
  result := 'cpu usage: ' + TThread.GetCPUUsage(Times).ToString + '%';
end;
 
{$IFDEF posix}
function meminfo: string;
var
  FS: TFileStream;
  ch: Char;
  Line: string;
  mem, res: TStringList;
begin
  result := '';
  FS := TFileStream.Create('/proc/meminfo', fmOpenRead);
  mem := TStringList.create;
  res := TStringList.create;
  try
    Line := '';
    ch := #0;
    while (FS.Read(ch, 1) = 1) and (ch <> #13) do
    begin
      Line := Line + ch;
    end;
    mem.text := line;
    mem.NameValueSeparator := ':';
    var total: string := mem.Values['MemTotal'];
    var available: string := mem.Values['MemAvailable'];
    var ifree: string := mem.Values['MemFree'];
    res.Values['MemTotal'] := total;
    res.Values['MemAvailable'] := available;
    res.Values['MemFree'] := ifree;
    result := res.text;
  finally
    FS.Free;
    mem.free;
    res.free;
  end;
end;
{$ENDIF}
{$IFDEF posix}
 
function diskinfo: string;
var
  disk: _statvfs;
  res: tstringlist;
begin
  result := '';
  res := tstringlist.Create;
  try
    statvfs('/', disk);
    var available: Single := disk.f_bsize * disk.f_bavail;
    var capacity: Single := disk.f_bsize * disk.f_blocks;
    var used: Single := (disk.f_blocks - disk.f_bfree) * disk.f_frsize;
    res.Values['DiskUsed'] := floattostr(roundto(used / 1024 / 1024, 2)) + ' MB';
    res.Values['DiskTotal'] := floattostr(roundto(capacity / 1024 / 1024, 2)) + ' MB';
    res.Values['DiskAvailable'] := floattostr(roundto(available / 1024 / 1024, 2)) + ' MB';
    result := res.text;
  finally
    res.free;
  end;
end;
{$ENDIF}
 
{$IFDEF  mswindows}
 
function memInfo: string;
var
  info: TMemoryStatus;
begin
  result := 'memory: ';
  GlobalMemoryStatus(info);
  result := result + inttostr(info.dwMemoryLoad) + '%';
end;
 
function diskInfo(const disk: string = 'c:'): string;
var
  FreeSpace, TotalSpace: Int64;
begin
  if System.SysUtils.GetDiskFreeSpaceEx(PChar(disk), FreeSpace, TotalSpace, nil) then
  begin
    var res: tstringlist := tstringlist.Create;
    try
      var t: Single := roundto(TotalSpace / 1024 / 1024, 2);
      res.Values['DiskTotal'] := t.ToString + ' MB';
      t := roundto(FreeSpace / 1024 / 1024, 2);
      res.Values['DiskFree'] := t.ToString + ' MB';
      result := res.Text;
    finally
      res.free;
    end;
  end;
end;
{$ENDIF}
 
begin
  try
    TThread.GetSystemTimes(Times);
    while True do
    begin
      writeln(CPUUsage);
      writeln(diskInfo);
      writeln(meminfo);
      sleep(5000);
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

  

  

posted @   delphi中间件  阅读(465)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-03-05 DATASNAP ISAPI中间件
2020-03-05 mormot重要的通信类说明
2020-03-05 adoconnection断线重连
2019-03-05 mqtt Qos
2017-03-05 下拉选择框
2012-03-05 服务端日志记录
点击右上角即可分享
微信分享提示