编程之美--CPU占用率问题所提到函数的总结

原创 2013年12月01日 22:38:09

第一次自己写博客,是将几篇觉得写的好的文章综合起来,应该算是原创吧,大家凑活看

一.利用QueryPerformanceFrequency() 和QueryPerformanceFrequency()组合记录运行时间

      使用代码如下:

	LARGE_INTEGER data;
	LONGLONG f,tb,te;
	QueryPerformanceFrequency(&data);
	f = data.QuadPart;
	QueryPerformanceCounter(&data);
	tb = data.QuadPart;
	Sleep(1);
	QueryPerformanceCounter(&data);
	te = data.QuadPart;
	cout<<(double)((te-tb)*1.0/f);

      两个函数都接受一个LARGE_INTEGER 类型的参数,作为返回值

      一下是LARGE_INTEGER的结构:

typedef   union   _LARGE_INTEGER   {    
          struct   { 
                  DWORD   LowPart;    
                  LONG     HighPart;    
          }; 
          LONGLONG   QuadPart; 
}   LARGE_INTEGER; 

       当使用的系统为32位时,LowPart和HighPart分别表示低32位和高32位,当为64位操作系统时,可以直接使用QuadPart。

       QueryPerformanceCounter(&data)是将当前的计数值返回给data,所以在程序中需要在所需要测的运行时间的两头分别加入该函数,得到计数差,记为dcount。

       QueryPerformanceFrequency(&data) 将当前的时钟频率返回给data,记为f。

       整个的运行时间是 T  = (double) dcount *1.0 / f;

二.关于多核处理器的问题

     1.书中提到的是用GetProcessorInfo(),我通过翻网页,找的是GetSystemInfo() 函数。

     需要参数  _SYSTEM_INFO  ,存放系统的具体信息,MSDN有详细讲解:

     http://msdn.microsoft.com/en-us/library/windows/desktop/ms724958(v=vs.85).aspx

    代码如下:

SYSTEM_INFO si;	
GetSystemInfo(&si);
cout<<si.dwNumberOfProcessors;

     如此即可得到CPU的具体个数。
    2.利用SetThreadAffinityMask()可以设置当前线程运行在哪一个核上

  DWORD_PTR  SetThreadAffinityMask  ( 
      HANDLE  hThread,                                  //  handle  to  thread 
      DWORD_PTR  dwThreadAffinityMask    //  thread  affinity  mask 
  );    

      第一参数是线程的句柄,第二个参数是运行在哪一个核上。

SetThreadAffinityMask(GetCurrentThread(),0x01);

     是将当前运行线程设置在第一个核上运行

高精度计时器QueryPerformanceCounter正确的打开方式(windows环境下)

引言 游戏程序中有很多需要用到时间的地方,往往会通过windows API来获取时间。先前写过一篇文章是关于时间同步的:网络游戏中的(低精度)时间同步,当需求更高精度的时间同步时,就需要QueryPe...
  • u010832643
  • u010832643
  • 2015年03月27日 10:12
  • 2256

利用QueryPerformanceCounter可以测试CPU性能

procedure TForm1.Button2Click(Sender: TObject); var I: Integer; LCount: Integer; LFre: I...
  • xiuzhentianting
  • xiuzhentianting
  • 2015年09月08日 13:17
  • 162

QueryPerformanceCounter精确计算执行时间

QueryPerformanceCounter 來精確計算執行時間在 Windows Server 2003 和 WindowsXP 中使用 QueryPerformanceCounter 函数的程序...
  • Augusdi
  • Augusdi
  • 2013年09月03日 09:56
  • 2037

《编程之美》学习笔记——指挥CPU占用率

问题: 写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率(单核)。有以下几种情况: 1.CPU占用率固定在50%,为一条直线 2.CPU的占用率为一条直线,具...
  • lyh03601
  • lyh03601
  • 2014年09月28日 15:07
  • 1167

(1.5.1.1)编程之美:让CPU占用率曲线听你指挥

题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况: 1.    CPU的占用率固定在5...
  • fei20121106
  • fei20121106
  • 2015年04月20日 13:47
  • 514

编程之美之扩展问题

参考链接:http://blog.csdn.net/wuyuegb2312/article/details/9896831 1.1 让CPU占用率曲线听你指挥 参考: http://blog.csd...
  • jerryzcx
  • jerryzcx
  • 2014年03月06日 23:33
  • 2517

linux CPU 画正弦曲线 编程之美

捣鼓了一下,画成了这个熊样子,算是蒙混过关了吧。 思想:大致原理是参考编程之美这本书上的,cpu的使用率是一段时间内cpu繁忙的平均值,所以可以通过一段时间内cpu繁忙的时间和空间的时间来控...
  • ragingCow
  • ragingCow
  • 2014年02月22日 12:02
  • 1041

JAVA控制CPU占用率(编程之美有感)(一)

JAVA控制CPU占用率(编程之美有感)(一)   自从看完编程之美的第一篇问题分析,内心十分触动:这是什么鬼?还能这样玩?之前对CPU的占用率只局限于: “卧槽,我内存满了,电脑卡死了”。 “擦!...
  • weixin_39396822
  • weixin_39396822
  • 2017年07月21日 14:17
  • 242

编程之美总结

2.1求二进制中1的个数 (1)
  • cz28274815
  • cz28274815
  • 2014年08月27日 23:10
  • 247

编程之美读书笔记1.1——让CPU占用率曲线听你的指挥

问题:如果机器是多CPU,上面的程序会出现什么结果?如何在多个CPU时显示同样的状态?例如,在双核的机器上,如果让一个单线程的程序死循环,能让两个CPU的使用率达到50%的水平么?为什么? 多CPU...
  • pipisorry
  • pipisorry
  • 2014年07月01日 16:23
  • 1433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程之美--CPU占用率问题所提到函数的总结
举报原因:
原因补充:

(最多只允许输入30个字)