有张图片要以60赫兹的频率显示/隐藏?有没有办法做到?(50分)

  • 主题发起人 主题发起人 ljdzxx
  • 开始时间 开始时间
啥意思?刷新率?
 
对,就是不停的隐藏/显示,速度要达到微秒级
 
用Delphi不太容易,最简单消息的响应时间也有5ms左右,最保守估计:5*60*2=600ms,再加上系统额外的开销……估计这个想法的可行性不大,除非嘛……自己搞个实时操作系统(呵呵,玩笑1个)。
 
刚看到:“微秒级”,可以用来监控洲际导弹了
 
楼上算错了吧,60赫兹是0.16667秒/次
把INTERVALE设为166就行了吧
timer事件中写上
Image1.Vasivable := not Image1.Vasivable;
 
李翔鹏,我试过了,不行的,我要达到和显示器一样的效果,就是快到肉眼基本分辨不出来图片不断的在刷
 
to 李翔鹏:

呵呵,小学数学的问题,1/60=?,用计算器算1下吧,hoho~
0.16667秒/次是6Hz!

再有,显示/隐藏 是两次Timer执行的结果,所以,即使是6Hz,也应该设为166/2=84才对。

to 楼主:

还有,用Timer来控制的话,效率和稳定性都不能保证,因为普通的Exe执行会受到Windows环境中很多因素的影响,不信的话,在Timer循环的时候,你把可执行程序的窗口拖住不放,或者开一个比较大的应用程序,就会看到Timer被暂停或者延时了。
 
Timer极限好象是1秒最多18次事件,所以不能依靠它的,最好自己写,嵌入ASM应该可以办到
 
写了一段测试程序,用来测试Timer响应的效率

var
a: Integer = 0;

implementation

Procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(a);
Caption := IntToStr(a);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
ShowMessage(IntToStr(GetTickCount()));
end;

P4 2.66/1G DDR333RAM 运行的结果:从0数到1228,TickCount值从6132984到6152218,效率大约为1228 / (6152.218 - 6132.984) = 63.85 (次/秒),这个值和机器硬件/环境配置相关。从结果看到,即使对于简单的加算和显示操作,Timer的效率也并不高,若处理一个较大位图的绘制,相信结果会更糟糕。同时也说明了:对于Timer的Interval,设定为16(= 1000 / 63.85)以下,毫无意义(仅针对上述配置的机器)。同意楼上的,写汇编效率比较高,但本人认为,效率想要达到显示卡的刷新速度(即:每一桢的更新都应该比显存的更新速度要快一些),在Windows系统常规环境下,很难做到。

建议楼主试一下DirectX,能直接操作显存。
 
晕倒,这个与Timer有什么关系?
关键是看你的图片有多大,WINDOWS能不能画得过来,如果只是个32*32的小ICON,肯定没问题
 
理论上是可以的,显示卡内存的速度比屏幕快,但一定要用直接写屏的,如directx
有好的游戏可以做到每秒100多帧.
 
可以自己来做
专门开一个线程,不停循环,通过取时间函数来比较
然后,将相互切换的两个图片读到内存里,切换时直接写屏。

取时间的函数我忘记了,好像是在某本工业控制的杂志上看到的,可以达到毫秒级的采样频率。
但是,人眼的分辨率是每秒24张图片,电影就是这么来的,有必要到60赫兹吗?
 
人眼的分辨率是每秒24张图片那游戏为什么要做成60帧以上才流畅,
你的显示器刷新率也做成24hz你看看是什么效果。
 

Similar threads

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