资源占用问题!急!(100分)

  • 主题发起人 主题发起人 任远
  • 开始时间 开始时间

任远

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟新作一屏保软件,有两个timer,第一个的interval为30,用于移动位置,第二个为8000,用于更换显示内容。背景设为黑色时,运行完全正常!但我设置为透明桌面后,别的程序基本无法运行了,经检查,主要是timer1的问题,但设置大了显示的内容在屏幕上又移动过慢,请教高手有何办法能降低资源的占用!!!
 
设定透明桌面以后会在重会窗口的时候调用大量的GDI,
解决办法就是自己来做桌面的透明,用个buffer保存下桌面,需要时画上去
 
timer里加SHLEEP(100)
 
To 41426277:
你的意思是在timer里加入shleep(100)这样一行命令?编译能不过哦
 
问题描述不清楚
shleep=sleep
;P
 
我的意思是:如果解决timer的事件触发过短导致资源占用过多的问题,够不够明确?
 
另外,shleep=sleep也是根本调试不过呀
 
把代碼貼出來!
 
注:wordVorg、wordHorg、wordmemoVorg、wordmemoHorg分别表示移动方向
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//单词开始移动
if wordVorg then
begin
if word.top>=1 then word.top:=word.top-1 else wordVorg:=False;
end
else
begin
if word.top<=form1.ClientHeight-word.Height then word.top:=word.top+1 else wordVorg:=True;
end;

if wordHorg then
begin
if word.left>=1 then word.left:=word.left-1 else wordHorg:=False;
end
else
begin
if word.left<=form1.ClientWidth-word.Width then word.left:=word.left+1 else wordHorg:=True;
end;

//释义开始移动
if wordmemoVorg then
begin
if wordmemo.top>=1 then wordmemo.top:=wordmemo.top-1 else wordmemoVorg:=False;
end
else
begin
if wordmemo.top<=form1.ClientHeight-wordmemo.Height then wordmemo.top:=wordmemo.top+1 else wordmemoVorg:=True;
end;

if wordmemoHorg then
begin
if wordmemo.left>=1 then wordmemo.left:=wordmemo.left-1 else wordmemoHorg:=False;
end
else
begin
if wordmemo.left<=form1.ClientWidth-wordmemo.Width then wordmemo.left:=wordmemo.left+1 else wordmemoHorg:=True;
end;
end;
 
用directx绘图,速度自然会快!
 
41426277和52free的意思是:
加入sleep(100)
不是shleep(100)
shleep:笔误。。。。。。。
 
呵呵,是我自己太菜哦,sleep是什么意思?我试过后,如果没有问题马上给分
 
sleep是中断进程指定时间
 
这里有一个别人做个屏保源码,也许你可以参考一下,要注册后才能进行下载的
http://www.codesky.net/show.asp?id=2363
 
困惑,加入sleep也不行,改用线程也不行,大家有没有更好方法呀?我只想某个label在屏幕上自由地移动
 
或者,只是需要几个文字是屏幕上任意移动,我现在的处理方法是不断触发timer的事件,然后在事件里改变label的top和left,在背景是黑色时,感觉移动还算平稳,但使用了透明背景后(form本身的透明属性),再使用其他的程序会感觉很慢!
 
使用双缓冲,并且绘制图像或字符时进行局部更新和局部绘制,
减少绘图的面积和绘图量,

最好用DirectX
 
DirectX就给我用户局限!另外,我的form是双缓冲,只是不是用绘制图形的方式显示的
 
系统默认的双缓冲效率很低,
最好实现局部双缓冲,进行局部更新
 
应该不是双缓冲的问题,我试过doublebuffer设为false也不行,照样是慢!!各位有没有好的解决方案?
 
后退
顶部