我现在在做一个程序,是多线程处理数据,然后主线程在paintBox绘图,但是处理同步关系很难,我又不想使用Synchronize  因为使用这个方法其实也是在主线程绘图,然后再同步到子线程中。而且子线程处理出来的数据非常大,如果Post到主线程的话会造成很大的内存申请,所以我想在子线程里面绘图,所以我想问子线程中是否可以绘图?因为在我印象中vcl只能主线程操作,请高手们帮帮忙!

解决方案 »

  1.   

    可以在子线程,传递canvas,注意同步和canvas的加锁
      

  2.   

    子线程操作界面vcl,必须Synchronize线程间的数据互访,倒是不必post吧,只要加了适当的互斥就行了
      

  3.   

    可以在子线程里在Bitmap里画好,然后Synchronize,贴到PaintBox上。 
      

  4.   

    我是说你在子线程里面自己开个TBitmap画图,然后Synchronize中将Bitmap的图贴到PaintBox上。
      

  5.   

    Synchronize 这种方法我觉得很危险。
    我现在一个线程计算数据,然后在一个窗口绘制这个数据,当我多开一个窗口时,需要向线程里增加一个object。当执行到Synchronize 方法时,同时开了一个窗口,这个时候因为主线程向子线程添加object时被锁住了,而Synchronize 方法又没有返回,造成了整个程序的死锁。另外我可能多个object同时画图(多个object在一个线程内),那贴位图的方法就非常难控制了。
      

  6.   

    你在主线程再开个Bitmap,保留上次子线程Bitmap的图像,重绘的时候再贴一次就可以了。
      

  7.   

    好吧  谢谢lhylhy  方向是有了,概念也清楚了,剩下就得靠自己了。结贴。