首页
论坛
专栏
课程

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

2019-4-16 21:35 2684

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

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

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

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



[招聘]欢迎市场人员加入看雪学院团队!

最后于 2019-4-19 10:28 被kagayaki编辑 ,原因:
上传的附件:
最新回复 (14)
kagayaki 2019-4-16 21:39
2
0

最后于 2019-4-17 00:18 被kagayaki编辑 ,原因:
kagayaki 2019-4-16 21:46
3
0
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编辑 ,原因:
kagayaki 2019-4-16 21:55
4
0
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
wofan[OCN] 21 2019-4-16 22:28
5
0
因为你用delphi,所以要赞一下你
kagayaki 2019-4-17 00:25
6
0
谢谢....
kagayaki 2019-4-17 00:59
7
0
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
kagayaki 2019-4-17 01:27
8
0
内容已删除
最后于 2019-4-17 02:07 被kagayaki编辑 ,原因:
Editor 2019-4-17 10:51
9
0
感谢分享~
KevinsBobo 4 2019-4-17 10:52
10
0
感谢分享
zlykcaj 2019-4-17 14:55
11
0
感谢分享~~~
lovehuai 2019-4-17 16:39
12
0
哇 少见的Delphi赞了

悠悠wzq 2019-4-18 08:59
13
0
因为delphi,所以要来赞一下。
wuzhuyecao 2019-4-20 22:41
14
0
感谢分享
Alfik 2019-4-22 19:28
15
0
Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Hyperthreading 1 Logical Cores 12 Physical Cores 6
上传的附件:
游客
登录 | 注册 方可回帖
返回