CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

怎样获得CPU频率?

楼主dancingelephant(舞象)2003-11-11 16:20:07 在 C++ Builder / Windows SDK/API 提问

怎样获得CPU频率? 问题点数:20、回复次数:4Top

1 楼zhangxxlyl()回复于 2003-11-11 17:00:04 得分 10

int   __fastcall   Frequence_MHz()    
  {    
  LARGE_INTEGER   ulFreq,   ulTicks,   ulValue,   ulResult;    
  __int64   ulEAX_EDX,   ulStartCounter;    
  DWORD   PriorityClass,   Priority;  
   
  PriorityClass   =   GetPriorityClass(GetCurrentProcess());  
  Priority   =   GetThreadPriority(GetCurrentThread());  
   
  SetPriorityClass(GetCurrentProcess(),   REALTIME_PRIORITY_CLASS);  
  SetThreadPriority(GetCurrentThread(),   THREAD_PRIORITY_TIME_CRITICAL);  
   
  //   it   is   number   of   ticks   per   seconds    
  QueryPerformanceFrequency(&ulFreq);    
   
  //   current   valueofthe   performance   counter    
  QueryPerformanceCounter(&ulTicks);    
   
  //   calculate   one   second   interval    
  ulValue.QuadPart   =   ulTicks.QuadPart   +   ulFreq.QuadPart;    
   
  //   read   time   stamp   counter    
  //   this   asm   instruction   load   the   highorder   32   bit   of   the   register   into   EDX    
  //   and   the   lower   order   32   bits   into   EAX    
  _asm   {    
  rdtsc    
  mov   DWORD   PTR   ulEAX_EDX,   EAX    
  mov   DWORD   PTR   (ulEAX_EDX   +   4),   EDX    
  }    
   
  //   start   no   of   ticks    
  ulStartCounter   =   ulEAX_EDX;    
   
  //   loop   for   1   second    
  do   {    
  QueryPerformanceCounter(&ulTicks);    
  }   while   (ulTicks.QuadPart   <=   ulValue.QuadPart);    
   
  //   get   the   actual   no   of   ticks    
  _asm   {    
  rdtsc    
  mov   DWORD   PTR   ulEAX_EDX,   EAX    
  mov   DWORD   PTR   (ulEAX_EDX   +   4),   EDX    
  }    
   
  //   calculate   result    
  ulResult.QuadPart   =   ulEAX_EDX   -   ulStartCounter;    
   
  SetThreadPriority(GetCurrentThread(),   Priority);  
  SetPriorityClass(GetCurrentProcess(),   PriorityClass);  
   
  return   (int)ulResult.QuadPart   /   1000000;    
  }    
  Top

2 楼pheavecn(C超)回复于 2003-11-19 11:45:43 得分 2

rdtsc需要用db   0xf;db   0x31代替。  
  编译器不支持。Top

3 楼ccrun(老妖)(www.ccrun.com)回复于 2003-11-19 12:22:18 得分 6

int   GetCpuSpeed()  
  {  
          int   PriorityClass,   Priority;  
          HANDLE   hThread,hProcess;  
   
          hThread=GetCurrentThread();  
          hProcess=GetCurrentProcess();  
   
          PriorityClass   =   GetPriorityClass(hProcess);  
          Priority   =   GetThreadPriority(hThread);  
   
          SetPriorityClass(hProcess,   REALTIME_PRIORITY_CLASS);  
          SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);  
   
          long   lEAXValue,lEDXValue;  
   
          SleepEx(50,false);  
   
          _asm  
          {  
                    xor   eax,eax  
                    rdtsc  
                    mov   lEAXValue,eax  
                    mov   lEDXValue,edx  
          }  
   
          if(SleepEx(500,false)==0)  
          {  
                  _asm  
                  {  
                          xor   eax,eax  
                          rdtsc  
                          sub   eax,lEAXValue  
                          sbb   edx,lEDXValue  
                          mov   lEAXValue,   eax  
                          mov   lEDXValue,   edx  
                  }  
          }  
   
          SetThreadPriority(hThread,   Priority);  
          SetPriorityClass(hProcess,   PriorityClass);  
          return   lEAXValue/(1000.0*500);  
  }Top

4 楼pheavecn(C超)回复于 2003-11-26 09:49:12 得分 2

楼上的用Sleep函数,延时不准。  
  我一般用rdtsc和QueryPerformanceCounter结合使用。Top

相关问题

  • 用纯Java如何获得本机CPU的频率?多谢了...
  • 怎么获得cpu的频率?inter的和amd的都要
  • 怎样获得CPU编号?
  • 怎样获得cpu主平?
  • 怎么获得cpu的频率?inter的和amd的都要,(来者有分了)
  • 用c/C++怎样获得CPU 的ID?
  • 怎样获得cpu的信息?
  • psos中怎样获得cpu占用率?
  • 有谁知道如何获得CPU 1秒的时钟周期数(就是工作频率,也叫主频)
  • AMD的CPU 2200频率相当于INTEL的多少频率?

关键词

  • ulticks
  • uleax
  • ulfreq
  • quadpart
  • edx
  • priority
  • second
  • dword

得分解答快速导航

  • 帖主:dancingelephant
  • zhangxxlyl
  • pheavecn
  • ccrun
  • pheavecn

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo