【VS开发】获取CPU tick tick 周期
多核处理器时,__rdtsc()的使用-编程珠玑第一章
根据书中提供的代码清单1-5,可以完成对于多核处理器的cpu占用率的控制。
但是在使用GetCPUTickCount计时时,下面的算式会出现一点小问题:
这里按照变量millisec 定义的名字,认为后面算式计算的结果是毫米ms,但是
((double)t_end – (double)t_begin)/(double)info.CurrentMhz
实际计算出的结果单位是秒,因为
__rdtsc()得到的cpu周期数,CurrentMhz为cpu频率,单位为MHZ=周期/秒=周期*1000/毫秒
所以如果在代码中定义让cpu工作10ms,休息10ms时,这里实际计算出的时间(单位s)和想要的时间(单位ms)会相差1000,
结果是在任务管理器中看到cpu的占占用率曲线基本没变化!
代码清单1-5
_PROCESSOR_POWER_INFORMATION info;
CallNTPowerInformation(11, // query processor power information
NULL, // no input buffer
0, // input buffer size is zero
&info, // output buffer
Sizeof(info)); // outbuf size
__int64 t_begin = GetCPUTickCount();
// do something
__int64 t_end = GetCPUTickCount();
double millisec = ((double)t_end – (double)t_begin)/(double)info.CurrentMhz;
多核cpu中控制,cpu使用率曲线:
int main()
{
HANDLE curhandle = GetCurrentThread();//获取当前线程句柄
DWORD_PTR dwThreadAffinityMask = 2;
if(!SetThreadAffinityMask(curhandle, dwThreadAffinityMask))
{
return 0;
}
int busytime = 10;//10ms
int idletime = busytime;
//DWORD starttime = 0;
//获取当前cpu的周期数
PROCESSOR_POWER_INFORMATION lpOutputBuffer;
CallNtPowerInformation(
ProcessorInformation,//获得处理器信息
NULL,
0,
&lpOutputBuffer,
sizeof(lpOutputBuffer)
);
printf("%d",lpOutputBuffer.CurrentMhz);
unsigned __int64 starttime;
unsigned __int64 endtime;
while(1)
{
starttime = __rdtsc();
//注意:这个地方要再除以一个1000,因为想要求的是ms单位,__rdtsc()得到的cpu周期数,
//CurrentMhz为cpu频率,单位为MHZ=周期/秒=周期*1000/毫秒
while((((double)__rdtsc() - (double)starttime)/1000/(double)lpOutputBuffer.CurrentMhz) <= busytime);
Sleep(idletime);
}
return 0;
}
#endif
【VS开发】获取CPU tick tick 周期的更多相关文章
- NET Core开发-获取所有注入(DI)服务
NET Core开发-获取所有注入(DI)服务 获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Cont ...
- C#获取CPU占用率、内存占用、磁盘占用、进程信息
代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading ...
- 获取CPU信息
1 查看手机CPU信息 cmd——adb shell——cd /proc------cat cpuinfo 2 获取cpu的是arm指令集,armv7指令集.还是neon指令集 /** * * [获取 ...
- Atitit. 获取cpu占有率的 java c# .net php node.js的实现
Atitit. 获取cpu占有率的 java c# .net php node.js的实现 通过wmic接口获取cpu占有率 C:\Users\Administrator.ATTILAXPC188&g ...
- atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较
atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...
- 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间
在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...
- Linux下java获取CPU、内存、磁盘IO、网络带宽使用率
一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得 ...
- C++ 嵌入汇编 获取CPU信息
#include "windows.h" #include "iostream" #include "string" using names ...
- C#获取CPU等硬件ID(转载)
System.Management命名空间提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统.设备和应用程序设置检测点有关的.应用程序和服 ...
- 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...
随机推荐
- jface viewer 全选
viewer.setSelection(new StructuredSelection(((List)viewer.getInput()))); StructuredSelection有多个构造方法, ...
- IntelliJ IDEA必装插件以及SpringBoot使用小技巧合集
IntelliJ IDEA必装插件 有不知道怎么安装的吗?File-->settings打开设置面板,找到plugins,输入想要安装的插件回车即可 1.背景图片 目前,IDEA支持设置背景图片 ...
- Shiro 中的 SecurityUtils(转)
在 Shiro 中 SecurityUtils 是一个抽象类.并且没有任何子类.在其中声明了一个静态属性,三个静态方法. 静态属性 securityManager private static Sec ...
- mapbox-gl空间分析插件turf.js使用介绍
mapbox-gl能够方便地显示地图,做一些交互,但是缺少空间分析功能,比如绘制缓冲区.判断点和面相交等等. turf.js是一个丰富的用于浏览器和node.js空间分析库,官网 http://tur ...
- 轮播图的3个常见bug,即处理bug思路及其解决办法
1,下载jquery.js文件,并且导入 2,在下面的img中写入可以用图片路径 <!-- 第一个bug: 刚打开页面时,按一下左键图片没切换,再按第二下时才切换图片. 第二个bug: Ctrl ...
- tomcat大文件上传
当服务器是Tomcat时,通过POST上传的文件大小的最大值为2M(2097152). 如果想修改该限制,修改方法如下: tomcat目录下的conf文件夹下,server.xml 文件中以下的位置中 ...
- 内存管理3- @property 参数详解
@property ----------------- Create two classes: Book & Student ------------------- book.m #impor ...
- 未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0, Culture=neutral, PublicKeyToken...
刚开始看老师 用VS新建一个“ADO.NET 实体数据模型” 但是一直报错:未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=11. ...
- kubernetes部署nginx/tomcat
kubernetes集群已经部署好了,需要的话可以参考之前的文章https://www.cnblogs.com/winter1519/p/10015420.html [root@master tomc ...
- VS2010,VS2013 Datagridview控件的编辑列功能,弹窗界面被挤扁了
搜了很久,没找到解决办法,在一个角落看到说要卸载Framework,实践后可以,发出来记一下. 解决办法: 发现自己电脑上多了Framework4.8,可能安装VS2013的时候自动安装的. 卸载了F ...