多核处理器时,__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. GEF中TreeViewer的叶子节点展开

    /** * GEF树叶子节点的展开 * @param items */ private void expand(TreeItem[] items) { for (int i = 0; i < i ...

  2. [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ...

  3. [Python自学] day-22 (1) (Session、CSRF、中间件)

    一.响应函数补充 三种返回响应的方式: return HttpResponse() return render() return redirect() HttpResponse: 除了能够返回字符串, ...

  4. 006_FreeRTOS其他API函数

    (一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...

  5. luogu 2114 [NOI2014]起床困难综合症 位运算+贪心

    感觉这个思路非常巧妙啊~ code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s&qu ...

  6. luogu 3998 [SHOI2013]发微博 map

    考试的时候被卡常了~ code: #include <bits/stdc++.h> #define ll long long #define N 200002 #define setIO( ...

  7. K8S中Pods

    什么是Pod 一个Pod(就像一群鲸鱼,或者一个豌豆夹)相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机 ...

  8. Linux配置Tomcat8080端口 远程无法访问解决办法

    是因为Linux的防火墙没有开放8080端口 解决办法: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #开启8080端口  /sbin/ ...

  9. 8月清北学堂培训 Day5

    今天是杨思祺老师的讲授~ 最短路练习题: POJ 1125 Stockbroker Grapevine 有 N 个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径.现在有一个消息要由某个人开 ...

  10. JS的十大排序算法

     名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外内存稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同 冒泡排序(Bub ...