比如在界面上有N个房间的显示在程序中我要用一个timer来每过30秒刷新一次。在timer的事件中我要做如下的工作。1 从数据库中取出一个记录集 ado ,这个记录集是这N个房间的信息。
2 对房间进行循环
  for i := 0 to roomcount - 1 do begin
    
  end3 在循环中我要对每个房间进行一些信息的更新
  
  比如
    room[i].info1 := getinfo1() //getinfo1这个函数可能有好多的比较复杂的语句。问题是:  如果只有10-20个房间还好说。界面刷新还比较平滑。
  但是如果有40个以上的房间,那界面的刷新速度就会变的很慢。
  因为执行 40次 room[i].info1 := getinfo1() 
  非常的耗费时间。请问这种刷新的问题,平时大家在做项目的时候是如何实现的?
或者说有什么更好的方法。
这个问题我已经困扰了我好久了,
谢谢~

解决方案 »

  1.   

    改变一个调用一次 Application.ProcessMessages()
      

  2.   

    1\不要用定时器,开个线程取数据库信息.
    2\每个房间设置"是否改变信息"的标志变量,在线程中把刚从数据库中获取的此房间的信息与上次保存的信息比较,如果改变则刷新响应的房间显示(最好向显示窗口用SendMessage发消息).
      

  3.   

    这就是算法的设计问题。
    为什么要这么复杂呢。用线程+一定的类或者函数的封装,不是简单的多么。
    思考一下:对每个房间进行更新+循环n次,那么你就是执行了n次更新;为什么不不考虑一次更新n个需要更新的房间呢。
    这就是设计思路。