procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
begin
  g := TGPGraphics.Create(Canvas.Handle);  g.DrawImage(img3, MakeRect(rt3));
  g.Free;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
begin
  nl:=(nl mod 360) +10;
  img3.Free;
  img3:=TGPImage.Create('新建文件夹\'+inttostr(nl)+'.png');
  Repaint;
  inc(ll);
  nl:=(nl+10) mod 360;
  if ll>=200 then begin
    timer3.Enabled:=false;
    ll:=0;
  end;
end;
png的图片是每一度一张 总共360张
使用这段代码模拟秒钟加速转动效果,发现cpu占太高,请教各位有么有好的实现方法

解决方案 »

  1.   

    如果LZ坚持要用这种多图切换的方案,想优化CPU占用,建议“以空间换时间”,启动时一次性把所有图片都加载到内存中,而不是每次换图都去读文件(磁盘I/O的性能开销太大了)。具体的做法可以一次创建360个TGPGraphics对象把图片全部加载进去,切换时对号加载就行。
      

  2.   

    每40毫秒动一帧还是会占cpu
      

  3.   

    里面的“读文件方式”,占cpu不超3%,不知道你要求多少才算不“占cpu”
      

  4.   

    用Canvas画,自己计算指针位置
      

  5.   

    呵呵,看来LZ想要的是ExitWindowsEx(EWX_SHUTDOWN,0),这样就不会占用你的CPU了。
      

  6.   

    关机?JPEXE你疯啦。。
      

  7.   

    自己使用Canvas画针吧。 
      

  8.   

    去下载个Raize控件  里面有时钟面板控件