代码可在Windows NT下正常运行

具体API说明请参照如下文档:

GetLogicalProcessorInformation

点击打开链接

点击打开链接

点击打开链接

  1. typedef BOOL (WINAPI *LPFN_GLPI)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD);
  2. DWORD CountSetBits(ULONG_PTR bitMask)
  3. {
  4. DWORD LSHIFT = sizeof(ULONG_PTR)*8 - 1;
  5. DWORD bitSetCount = 0;
  6. ULONG_PTR bitTest = (ULONG_PTR)1 << LSHIFT;
  7. DWORD i;
  8. for (i = 0; i <= LSHIFT; ++i)
  9. {
  10. bitSetCount += ((bitMask & bitTest)?1:0);
  11. bitTest/=2;
  12. }
  13. return bitSetCount;
  14. }
  15. LPFN_GLPI glpi;
  16. glpi = (LPFN_GLPI) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"GetLogicalProcessorInformation");
  17. if (NULL == glpi)
  18. {
  19. printf("GetLogicalProcessorInformation is not supported.\n");
  20. }
  21. BOOL done = FALSE;
  22. PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
  23. PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
  24. DWORD returnLength = 0;
  25. while (!done)
  26. {
  27. DWORD rc = glpi(buffer, &returnLength);
  28. if (FALSE == rc)
  29. {
  30. if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
  31. {
  32. if (buffer)
  33. free(buffer);
  34. buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(returnLength);
  35. if (NULL == buffer)
  36. {
  37. printf("Error: Allocation failure\n");
  38. return (2);
  39. }
  40. }
  41. else
  42. {
  43. printf("Error %d\n", GetLastError());
  44. return (3);
  45. }
  46. }
  47. else
  48. {
  49. done = TRUE;
  50. }
  51. }
  52. ptr = buffer;
  53. DWORD byteOffset = 0;
  54. DWORD logicalProcessorCount = 0;
  55. DWORD processorCoreCount = 0;
  56. while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength)
  57. {
  58. switch (ptr->Relationship)
  59. {
  60. case RelationProcessorCore:
  61. processorCoreCount++;
  62. logicalProcessorCount += CountSetBits(ptr->ProcessorMask);
  63. break;
  64. }
  65. byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
  66. ptr++;
  67. }
  68. printf("logical:%d  core:%d\n", logicalProcessorCount, processorCoreCount);

http://blog.csdn.net/tobacco5648/article/details/22201169

Windows下获取逻辑cpu数量和cpu核数量的更多相关文章

  1. Windows下获取逻辑cpu数量和cpu核数量(用GetLogicalProcessorInformation,从XP3才开始有的API)

    代码可在Windows NT下正常运行 具体API说明请参照如下文档: GetLogicalProcessorInformation 点击打开链接 点击打开链接 点击打开链接 typedef BOOL ...

  2. Windows下获取高精度时间注意事项

    Windows下获取高精度时间注意事项 [转贴 AdamWu]   花了很长时间才得到的经验,与大家分享. 1. RDTSC - 粒度: 纳秒级 不推荐优势: 几乎是能够获得最细粒度的计数器抛弃理由: ...

  3. c和c++在windows下获取时间和计算时间差的方法总结

    c/c++在windows下获取时间和计算时间差的几种方法总结 一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double diff ...

  4. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  5. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  6. C语言实现Windows下获取IP和MAC地址。

    C语言实现Windows下获取IP和MAC地址. #include <winsock2.h> #include <stdio.h> #include <stdlib.h& ...

  7. Windows下获取CPU频率

    一直想在Windows下取得CPU的时钟速度,找了好久终于找到了函数CallNtPowerInformation,要想使用它,首先必须包含powrprof.h头文件和链接库powerprof.lib. ...

  8. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

  9. windows下揪出java程序占用cpu很高的线程

    背景 天天搞java,这些监控也都知道,用过,但也没往细里追究.因为也没碰见这种问题,这次还是静下来走一遍流程吧.与网上基本一致,不过我区分了下linux和windows的不一样.我感觉基本是程序写成 ...

随机推荐

  1. Ubuntu 安装 SSH server 并配置 SSH 无密码登录

    https://hinine.com/install-and-configure-ssh-server-on-ubuntu/ Ubuntu 安装 SSH server 并配置 SSH 无密码登录 发表 ...

  2. Android之assets资源目录的各种操作

    第一种方法:       String path = file:///android_asset/文件名; 第二种方法:         InputStream abpath = getClass() ...

  3. ActiveReports 报告应用程序教程 (2)---上市类报告

     大多数数字在报告中系统类报告列表.实例:客户名单.产品列表.设备清单.采购清单.优惠券.商品发票.工作人员清点等..根据报告,查看类别列表相对简单.但,分丰富,在清单类报表中能够增加数据统计.数 ...

  4. QT之二级菜单(二级菜单的箭头可以使用QSS设置图片)

    QT之二级菜单 QT之二级菜单 开场白 效果图 上代码 可参考文章 下代码 结尾 开场白 今天我们一起来了解下,在我们QT中,二级菜单是如何实现的,在上篇我们学习了QT之系统托盘,QT之自定义菜单,  ...

  5. Linux经常使用的命令(21) - find参数具体解释

    一.使用name选项: 文件名称选项是find命令最经常使用的选项.要么单独使用该选项,要么和其它选项一起使用.  能够使用某种文件名称模式来匹配文件,记住要用引號将文件名称模式引起来.  无论当前路 ...

  6. 1-5设定NetCore监听端口

    问题的起源:启动一个.netCore项目,默认使用的是5000端口,当我们有很多个项目的时候(集群),不可能都使用5000端口. 方法1:set ASPNETCORE_URLS=http://127. ...

  7. delphi的bpl、dcp 、dcu文件意义(BPL相当于C++中的DLL,DCP相当于C++中的Lib,编译时需要)

    BPL  英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件.编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文 ...

  8. arcserver开发小结(三)

    一.关于网络数据集的制作 由于要做实现网络分析的功能,而手中却没有网络数据集,关于网络数据集的制作,网上也有不少的资料.我参考的是ESRI为我们提供的帮助文档(Network_Analyst_Tuto ...

  9. GameBuilder见缝插针游戏开发系列(AA)

    今天推出了一款游戏叫<AA>.在最近IOS只是弹出一个游戏.非常心脏的孩子,但有很多乐趣.今天,我们谈论它tangide(GameBuilderV2.0)用控件UICanvas实现它. 在 ...

  10. WPF Timeline简易时间轴控件的实现

    原文:WPF Timeline简易时间轴控件的实现 效果图: 由于整个控件是实现之后才写的教程,因此这里记录的代码是最终实现后的,前后会引用到其他的一些依赖属性或者代码,需要阅读整篇文章. 1.确定T ...