发信人: szbug(深圳虫)
整理人: wenbobo(2003-08-23 11:08:06), 站内信件
|
【 在 lynch_9624 的大作中提到:】
:GetSystemInfo 在bcb里面有么?
:......
GetSystemInfo只能获取CPU的类型,不能获取CPU的频率。
说到检测CPU的速度,一般是测试在单位时间内运算的指令条数,但用这种方法有太大的局限性,由于受到很多因素的影响,准确度比较低,特别是在Windows环境下,你不知道在你的程序外别的程序占用了多少的时间片。其实,在586及以上档次处理器中,已经有了一条专用的指令来测试主频,那就是 RDTSC指令,意思是读取时间标记计数器,是处理器内部的一个64位的MSR (model specific register),它每个时钟增加一个记数。在处理器复位的时候,初始值为0,RDTSC 指令把 TSC的值低32位装入EAX中,高32位装入EDX中。如果CPU的主频是200MHz,那么在一秒钟内,TSC的值增加 200.000.000次。所以在计算的时候,把两次的TSC差值除以两次的时间差值就是CPU的主频。程序的结构如下: 初始化的时候设置一个定时器,定时时间为1秒,然后在定时器消息中利用 RDTSC 取得 TSC计数,再和上次保留的值相减,然后除以时间差即可。
bcb OK
#prgram inline
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD eax1,edx1,eax2,edx2;
asm
{
rdtsc
mov eax1,eax
mov edx1,edx
}
Sleep(1000);
asm{
rdtsc
mov eax2,eax
mov edx2,edx
}
eax2-=eax1;
edx2-=edx1;
edx2*=2147483647;
edx2+=eax2;
Label2->Caption=IntToStr(edx2);
}
---- 深圳赛格6546
我是一条虫,来自深圳。
I like rc model.
免费的动态域名解析 |
|