首页
社区
课程
招聘
[分享] 获取 CPU 核心数、逻辑处理器数、主频、名字、使用率
发表于: 2019-4-16 21:35 6882

[分享] 获取 CPU 核心数、逻辑处理器数、主频、名字、使用率

2019-4-16 21:35
6882
在看雪多年了,因为太笨。一直未能学到什么技术。前一些天帮人做了一个 CPU 使用率的,其中有检查CPU的,所以大家以后有要用到的,就不用浪费太多时间在这方面。出于这个原因,所以想分享出来。

获取 CPU  的 NUMA节点数、CPU插槽个数 、 核心数 、 逻辑处理器数(线程数)、名字、制造商、指令集、主频、等等
对于每个进程的 CPU 占用,直接用 NtQuerySystemInformation 查询所有进程, 再

(每个进程的 UserTime.QuadPart + 每个进程的 KernelTime.QuadPart  - 上一次每个进程的时间)   / cWaitTime)  / 100 / 逻辑处理器数 就可以得到了。
  CPU使用率 = 100 - 空闲进程(PID 为0)  使用率


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-4-19 10:28 被kagayaki编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (14)
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2

最后于 2019-4-17 00:18 被kagayaki编辑 ,原因:
2019-4-16 21:39
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
CPU 使用率,还有软件中一些其他细节

32位进程查询64位进程模块等功能,都是直接读PEB,再查询相关的信息

// WinExec(PChar(C:\Windows\explorer.exe /n,/select, "C:\WINDOWS\abc.exe"), SW_Show);
// ShellExecute(0, nil, 'explorer.exe', '/select,C:\WINDOWS\abc.exe', nil, SW_SHOWNORMAL);

// 打开包含文件夹,并选中指定的文件
function MyOpenContainingFolder(const StrFilePath : String) : Boolean;
var
  hrCoInit, hr : HResult;
  pidl : PItemIDList; //PIDLIST_ABSOLUTE;
  psfgaoOut: TSFGAOF;
begin
  Result:=False;
  hrCoInit := MySHCoInitialize();  // 在使用SHOpenFolderAndSelectItems之前调用CoInitialize或CoInitializeEx   CoInitialize(nil); //


  hr := SHParseDisplayName(PWideChar(WideString(StrFilePath)),  //指向以零结尾的宽字符串的指针,该字符串包含要解析的显示名称。
                           nil,   //用于控制解析操作的绑定上下文。此参数通常设置为NULL。
                           pidl,   // 指向ITEMIDLIST类型的变量的指针的地址,该变量接收对象的项标识符列表。如果发生错误,则此参数设置为NULL。
                           0,     // 一个ULONG值,指定要查询的属性。要查询一个或多个属性,请使用表示感兴趣属性的标志初始化此参数。
                                   // 有关可用SFGAO标志的列表,请参阅IShellFolder :: GetAttributesOf。
                           psfgaoOut);  // 指向ULONG的指针。返回时,设置对象为true且在sfgaoIn中请求的属性。对象的属性标志可以是零或SFGAO标志的组合。

  // 将Shell命名空间对象的显示名称转换为项目标识符列表,并返回该对象的属性。
  // 此函数是将字符串转换为指向项标识符列表(PIDL)的指针的首选方法。

  // 文件不存在时, SUCCEEDED(hr) 不会为真
  if SUCCEEDED(hr) then
  begin
    if SUCCEEDED(SHOpenFolderAndSelectItems(pidl,
                                         0,  // 选择数组中的项目数,apidl。如果cidl为零,则pidlFolder必须指向一个完全指定的ITEMIDLIST,
                                             // 描述要选择的单个项目。此功能打开父文件夹并选择该项目。

                                         nil,  // 指向PIDL结构数组的指针,每个结构都是在pidlFolder引用的目标文件夹中选择的项。
                                         0)) then   // 可选标志  OFASI_EDIT   OFASI_OPENDESKTOP
    begin
    Result:=True;
    end;

  CoTaskMemFree(pidl);
  end;

  MySHCoUninitialize(hrCoInit); //CoUninitialize();
end;
最后于 2019-4-17 01:39 被kagayaki编辑 ,原因:
2019-4-16 21:46
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
2019-4-16 21:55
0
雪    币: 2899
活跃值: (1753)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
因为你用delphi,所以要赞一下你
2019-4-16 22:28
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢....
2019-4-17 00:25
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
2019-4-17 00:59
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
2019-4-17 01:27
0
雪    币: 21449
活跃值: (62273)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
9
感谢分享~
2019-4-17 10:51
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2019-4-17 10:52
0
雪    币: 3021
活跃值: (241)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢分享~~~
2019-4-17 14:55
0
雪    币: 19
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
哇 少见的Delphi赞了

2019-4-17 16:39
0
雪    币: 238
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
因为delphi,所以要来赞一下。
2019-4-18 08:59
0
雪    币: 54
活跃值: (913)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
感谢分享
2019-4-20 22:41
0
雪    币: 897
活跃值: (5916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Hyperthreading 1 Logical Cores 12 Physical Cores 6
上传的附件:
2019-4-22 19:28
0
游客
登录 | 注册 方可回帖
返回
//