多核处理器时,__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 周期的更多相关文章

  1. NET Core开发-获取所有注入(DI)服务

    NET Core开发-获取所有注入(DI)服务 获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Cont ...

  2. C#获取CPU占用率、内存占用、磁盘占用、进程信息

    代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading ...

  3. 获取CPU信息

    1 查看手机CPU信息 cmd——adb shell——cd /proc------cat cpuinfo 2 获取cpu的是arm指令集,armv7指令集.还是neon指令集 /** * * [获取 ...

  4. Atitit. 获取cpu占有率的 java c# .net php node.js的实现

    Atitit. 获取cpu占有率的 java c# .net php node.js的实现 通过wmic接口获取cpu占有率 C:\Users\Administrator.ATTILAXPC188&g ...

  5. atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

    atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...

  6. 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间

    在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...

  7. Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

    一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得 ...

  8. C++ 嵌入汇编 获取CPU信息

    #include "windows.h" #include "iostream" #include "string" using names ...

  9. C#获取CPU等硬件ID(转载)

    System.Management命名空间提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统.设备和应用程序设置检测点有关的.应用程序和服 ...

  10. 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

随机推荐

  1. IntelliJ IDEA必装插件以及SpringBoot使用小技巧合集

    IntelliJ IDEA必装插件 有不知道怎么安装的吗?File-->settings打开设置面板,找到plugins,输入想要安装的插件回车即可 1.背景图片 目前,IDEA支持设置背景图片 ...

  2. Qt 把连续两次单击当成双击

    方法1: 主要通过计时器,在一段时间内的连续两次单击,触发双击事件 void init() { m_nClickCount = 0; m_timer = new QTimer(this); conne ...

  3. Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)

    题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...

  4. C语言学习系列(五)变量和常量

    一.常量 定义:在程序运行中,其值不能改变的量称为常量 分类:常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量. 在 C 中,有两种简单的定义常量的方式: ...

  5. HTML的列表,表格与媒体元素

    一.无序列表 <ul>                            <li>无序列表</li>                            &l ...

  6. 十七、程序包管理之yum和编译安装

    YUM Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发 yum命令的工作原理 1.接收用户 ...

  7. Python学习日记(六)——内置函数和文件操作(lambda)

    lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...

  8. 2015-2016 ACM ICPC Baltic Selection Contest

    这是上礼拜三的训练赛,以前做过一次,这次仅剩B题没补.题目链接:https://vjudge.net/contest/153192#overview. A题,水题. C题,树形DP,其实是一个贪心问题 ...

  9. Nginx 之负载均衡与反向代理

    负载均衡服务器策略: 1.轮循  每个请求逐个分发到后端服务器 2.加权轮循  按照分配的权重将请求分发到后端服务器 3.ip hash 轮询的基础上,保持一个客户端多次请求分发到一台后端服务器上 一 ...

  10. [GIT]比较不同分支的差异

        比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: undefined 1.查看 dev 有,而 master 中没有的: 1.查看 de ...