【Darwin学习笔记】之获取系统处理器数量的方法
阅读Darwin源码的时候看到这个方法,感觉挺有用处,且考虑了多种平台下的实现方式,直接贴代码,以后说不定会用到~
单一种平台下的实现方法可能很容易,但是把这些个系统都收集在一起,在一个函数中实现还是极好的
【转载请注明出处】:http://blog.csdn.net/longlong530
- UInt32 OS::GetNumProcessors()
- {
- #if (__Win32__)
- SYSTEM_INFO theSystemInfo;
- ::GetSystemInfo(&theSystemInfo);
- return (UInt32)theSystemInfo.dwNumberOfProcessors;
- #endif
- #if (__MacOSX__ || __FreeBSD__)
- int numCPUs = 1;
- size_t len = sizeof(numCPUs);
- int mib[2];
- mib[0] = CTL_HW;
- mib[1] = HW_NCPU;
- (void) ::sysctl(mib,2,&numCPUs,&len,NULL,0);
- if (numCPUs < 1)
- numCPUs = 1;
- return (UInt32) numCPUs;
- #endif
- #if(__linux__ || __linuxppc__)
- char cpuBuffer[8192] = "";
- StrPtrLen cpuInfoBuf(cpuBuffer, sizeof(cpuBuffer));
- FILE *cpuFile = ::fopen( "/proc/cpuinfo", "r" );
- if (cpuFile)
- { cpuInfoBuf.Len = ::fread(cpuInfoBuf.Ptr, sizeof(char), cpuInfoBuf.Len, cpuFile);
- ::fclose(cpuFile);
- }
- StringParser cpuInfoFileParser(&cpuInfoBuf);
- StrPtrLen line;
- StrPtrLen word;
- UInt32 numCPUs = 0;
- while( cpuInfoFileParser.GetDataRemaining() != 0 )
- {
- cpuInfoFileParser.GetThruEOL(&line); // Read each line
- StringParser lineParser(&line);
- lineParser.ConsumeWhitespace(); //skip over leading whitespace
- if (lineParser.GetDataRemaining() == 0) // must be an empty line
- continue;
- lineParser.ConsumeUntilWhitespace(&word);
- if ( word.Equal("processor") ) // found a processor as first word in line
- { numCPUs ++;
- }
- }
- if (numCPUs == 0)
- numCPUs = 1;
- return numCPUs;
- #endif
- #if(__solaris__)
- {
- UInt32 numCPUs = 0;
- char linebuff[512] = "";
- StrPtrLen line(linebuff, sizeof(linebuff));
- StrPtrLen word;
- FILE *p = ::popen("uname -X","r");
- while((::fgets(linebuff, sizeof(linebuff -1), p)) > 0)
- {
- StringParser lineParser(&line);
- lineParser.ConsumeWhitespace(); //skip over leading whitespace
- if (lineParser.GetDataRemaining() == 0) // must be an empty line
- continue;
- lineParser.ConsumeUntilWhitespace(&word);
- if ( word.Equal("NumCPU")) // found a tag as first word in line
- {
- lineParser.GetThru(NULL,'=');
- lineParser.ConsumeWhitespace(); //skip over leading whitespace
- lineParser.ConsumeUntilWhitespace(&word); //read the number of cpus
- if (word.Len > 0)
- ::sscanf(word.Ptr, "%"_U32BITARG_"", &numCPUs);
- break;
- }
- }
- if (numCPUs == 0)
- numCPUs = 1;
- ::pclose(p);
- return numCPUs;
- }
- #endif
- #if(__sgi__)
- UInt32 numCPUs = 0;
- numCPUs = sysconf(_SC_NPROC_ONLN);
- return numCPUs;
- #endif
- return 1;
- }
PS: 函数摘自Darwin源码:\StreamServer\CommonUtilitiesLib\OS.cpp
【Darwin学习笔记】之获取系统处理器数量的方法的更多相关文章
- Jquery学习笔记:获取jquery对象的基本方法
jquery最大的好处是将js对html页面的操作(读写)进行了封装,隔离了浏览器的差异性,并简化了操作,和提供了强大的功能. 在web页面中,所有的js操作都是围绕操作dom对象来的.而jquery ...
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...
- C#获取CPU处理器核心数量的方法_C#教程
https://yq.aliyun.com/ziliao/89096 摘要: 本文讲的是C#获取CPU处理器核心数量的方法_C#教程, 有几条不同的处理器信息,您可以获得有关的信息:物理处理器数量.核 ...
- Android获取系统时间的多种方法
Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现. 现总结如下: 方法一: ? 1 2 3 4 5 ...
- vue学习笔记之:为何data是一个方法
vue学习笔记之:为何data是一个方法 在vue开发中,我们可以发现,data中的属性值是在function中return出来的.可为何data必须是一个函数呢?我们先看官方的解释: 当一个组件被定 ...
- WPF 获取系统 DPI 的多种方法
原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- SAS学习笔记59 OPTIONS系统选项
带VALUE选项的OPTIONS过程将指定选项的值.范围及该值如何设置的信息打印到日志窗口 在日志窗口打印的输出如下图所示 将GETOPTION函数作为%SYSFUNC宏函数的参数,从而获取系统选项设 ...
随机推荐
- 使用NATS替换NSQ为后台服务解耦
简介 满世界的后台都在向微服务架构发展,我对微服务的理解是将一个复杂的业务分拆为多个服务,由多个服务协作完成一个服务:在后台微服务架构时需要考虑高可用.一致性等问题,也要考虑在实现上.编码上的复杂程度 ...
- flask写入数据库
sqlalchemy是一个关系型数据库框架,它提供了高层的ORM 和底层的原生数据库的操作. sqlalchemy实际上是对数据库的抽象,通过python对象操作数据库,提高开发效率. 安装 flas ...
- css实现两栏布局,左侧固定宽,右侧自适应的7中方法
一个面试会问的问题,如何实现两个盒子,左侧固定宽度,右侧自适应. 1.利用 calc 计算宽度的方法 css代码如下: .box{overflow: hidden;height: 100px;marg ...
- HDU 2023 求平均成绩
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...
- React Native使用 DeviceEventEmitter发送通知emit和监听接收addListener的用法
js 向 js 发送数据 DeviceEventEmitter.emit('自定义名称',发送数据); 例:边看边买退出登录之后,我的淘宝和详情页的钱包数据应该改变.这时,我们可以在退出登录请求返 ...
- unzip命令
unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...
- mysql之 OPTIMIZE TABLE整理碎片
来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除 ...
- kubernetes 中,Pod、Deployment、ReplicaSet、Service 之间关系分析
deploy控制RS,RS控制Pod,这一整套,向外提供稳定可靠的Service. 详见:https://blog.csdn.net/ucsheep/article/details/81781509
- Jenkins 安装启动提示“iJob for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.”
通过RPM安装Jenkins简单方便,不太需要复杂的过程,但是在安装完成以后启动Jenkins的时候提示“Starting jenkins (via systemctl): Job for jenki ...
- C#中四种常用集合的运用(非常重要)【转】
1.ArrayList ArrayList类似于数组,有人也称它为数组列表.ArrayList可以动态维护,而数组的容量是固定的. 它的索引会根据程序的扩展而重新进行分配和调整.和数组类似,它所存储的 ...