我现在写一个东西,结构是在View中写了一个数据处理的控件(控件中包括有图形处理)现在的问题是,我有大量的数据需要填充到控件之中去曾经想到的解决方法:1.使用多线程处理填充操作,把控件句柄传递给新线程,在新线程中处理
 
  问题是:这个控件比较复杂,包含大量同级控件,很难传递给新线程2.使用多线程处理填充操作,传递视图指针(this)到新线程,在新线程中调用视图类的方法来处理
  
  问题是:视图类的控件包含有大量的数据,和许多的控件对象,在这种处理之中不少数据无法共享3.创建新线程,线程接受数据,发送消息到主线程,由出线程处理填充操作  问题是:由于数据量比较大,这个填充操作也需要大量时间
求教一种可行的解决方案

解决方案 »

  1.   


    显示的方面数据处理最多的主要有2个控件,一个数据控件和一个图像控件数据控件类似于grid,我是直接填充的图像控件中的图像是画出来的,画图的方式我页进行了优化,单独处理速度还可以接受
      

  2.   

    关于线程个人感觉合理的方法:
    1.数据处理要创建一个线程来做,这样就不会卡死在UI界面上了,
    2.启动线程来处理数据,当数据处理完成后,存放在共享区域(各相关线程共享)
    3.发送消息给主线程或者干脆直接开一个界面线程,负责更新界面
    4.更新界面时尽可能局部刷新,避免不必要的全局刷新
    5.另外一点,数据量很频繁,多数情况不是每一次处理完的数据都必须显示,只显示最新的就可以了,就看你的共享区域如何维护了
    6.最后就是你的刷新算法本身的效率问题,gdi也是有很多技巧的lz好运
      

  3.   


    在其他的地方我已经经过测试,耗时主要集中在数据填充控件方面,填充方式和数据结构类似于listctrl;我测试就是listctrl在填充数据的时候,超多百多行数据也会相当的慢前4条我的确是这么做的,
    第5条中 由于我的某些操作必须全部刷新,同样问题是填充控件耗时较多
    第6条,由于可能许多数据都发生改变,此处刷新其实就是删除原有数据,重新进行填充
      

  4.   

    左边类似LISTCONTROL,数据看上去也不多,右边是用什么方式显示的?
      

  5.   

    我也做过类似的东西,不过我的列表控件和图形控件是在不同的窗口中,可以切换。我的列表控件显示7列数据,用的是CListCtrl,刷新速度50ms左右。当时也为数据的刷新烦恼,下面说我的两点:(1)不知道楼主使用listctrl测试的时候有没有使用虚模式,那样速度会快很多,你看看你使用的列表控件是否也有虚模式功能,我知道那个CGridCtrl有。(2)在填充数据的时候尽量不要使用CString之类的,用字符串函数sprintf之类,因为API接收的都是LPCTSTR之类的参数,使用CString还要进行转换,可能会牺牲效率。希望能给你提供帮助。
      

  6.   

    非常感谢WizardK的多次解说
    也非常感谢zxdlms的思想最后参考了zxdlms的方法,
    虽然我的控件没有虚模式,但了解了思想,我自己重写了这几个部分的虚模式功能。
    结贴