有没有硬件编程高手知道如何用DELPHI在WINDOWS 2000/XP中获取CPU的当前倍频 ( 积分: 300 )

  • 主题发起人 主题发起人 weiliu
  • 开始时间 开始时间
W

weiliu

Unregistered / Unconfirmed
GUEST, unregistred user!
嵌入汇编也行,如果有控件或DLL也行
 
好贴不要沉
顶顶顶顶顶顶顶顶顶顶顶
 
以前好象见过开源的电脑硬件检测软件,网上找找看,参考一下。
 
楼上的,在哪去找啊?
 
应该注册表中有消息
HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/0/~MHZ
 
可以从里面取
 
暗夜中独舞,我需要的是倍频而不是主频。而且注册表的主频是不准确的,比如用CLOCKGEN等软件修改的主频不会在那里反映出来。
 
谁知道有知道倍频的控件吗?
 
function cpuspeed():Double;stdcall;
const
DelayTime = 500; // 时间单位是毫秒
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
不知道是不是你要的
 
哦 弄错了 倍频 不知道了
 
不需要控件 用WMI就可以搞定了
 
bluedyness,
能给个WMI拿到倍频的程序吗?
 
甭提了 真丢人 我刚刚翻看了一下你以前的帖子 才知道你早就比我走的远多了!
我跟你以前的做法差不多 我是用CurrentClockSpeed取主频 除于用ExtClock取得的外频,但看了你以前的帖子后 我试着改变主频 却发现用CurrentClockSpeed(不是用MaxClockSpeed)取的主频根本就不会变 晕!
另外我只能取得CPU的编号,制造商,电压,产品名称,版本,步长,型号,位宽....你知道怎么取得封装,工艺,缓存吗?我得到的CacheSize根本就不对劲!你的那个帖子好像还提到了一个控件 如果方便的话 你看能不能发些相关的资料给我参考一下 不胜感激!
bluedayness@tom.com
 
楼上的跟我志同道合啊。
唉,国内这帮人搞程序的就知道一天到晚搞数据库,一点意思都没有,关于硬件上的东西没几个懂的。
你提到的那个外频(ExtClock),无论是从WMI还是从我说的那个控件得出来的结果都是一样的,最令人沮喪的是它不仅不能够实时地反映外频的改变,而且它根本有时就不准确!!!比如我的机器是SP 2500+和昂达N61G,超到350外频,则用这个ExtClock就是准确的,而我公司的破机是P4/2G的,倍频应该是20,外频是100,而用ExtClock就是400,也就是说它变成了前端总线的频率了(FSB),这还没完,很多其它的AMD及INTEL的CPU和不同的主板配套,它得出的频率更为可笑,几十的频率都有,总之是不准的,我说的那个控件与WMI一样都是得不到准确的外频,但是你用过CPU-Z或CLOCKGEN还有EVEREST就知道,它们的外频不但准确而且都是实时变化的。我的那个控件可以得到你所要求的那些,现在只是倍频和外频无法得到,另外,现在扣肉CPU和一些笔记本CPU,用通常的方法连CPU主频都测不准,你可以看我以前的贴子。
 
网上好多的,自己找吧
 
zzbird,
如果网上有好多的话我就不用费劲到这里来探讨了。
 
硬件啊。不太了解。
 
我这里有个实时获取CPU速度的代码,使用汇编嵌入,不知道对你有没有用:
function GetCPUSpeed: Double;
const
DelayTime = 500; // 时间单位是毫秒
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;
 
晕倒,楼上又来了个贴取CPU主频的,唉......
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部