在VCL 中最好不用多线程。

解决方案 »

  1.   

    那该怎么处理?
    因为这个绘画过程实在很费CPU时间。
    我想在这个过程让用户响应。
      

  2.   

    1、如想看到绘画过程,可以建立一个绘画线程,在OnPaint事件中加入通知线程绘画的代码(激活-->绘图-->挂起)
    2、不想看到绘画过程,可以建立一个线程和一个兼容DC,线程随时在DC上绘图,并适时通知PaintBox重画,OnPaint中可以直接将兼容DC复制到PaintBox上
      

  3.   


    请查看<DELPHI 5开发人员指南>中的第11章节中的多线程与图形处理一文……
    如果没有此书,可在网站上下载此书的电子档,或留下你的电子邮件地址…
      

  4.   

    可以先建立一个后台线程,在OnPaint时通知线程进行绘图,绘图结束后挂起:
       激活-->绘图-->挂起
    当然也可以让线程在后台根据情况随时重绘PaintBox也可以
      

  5.   

    To budi()
       我确实想看到绘画过程。我在OnPaint事件中激活了线程,但在这个过程中,用户还是不能响应其它消息。不知道这是为什么?
      

  6.   

    Synchronize的问题,可以试试给线程传递PaintBox.Parent.Handle,线程用API直接在句柄上画就可以了
      

  7.   

    所有涉及到vcl界面处理的线程代码,vcl都只能包装在主线程中执行。
    所以你等于没有用线程, 改用api试试, vcl的机制就是如此。要不为什么非要把非后台代码放在Synchronize函数中呢,就是为了把这段
    代码编译后放在主线程中。vcl严格来说,实现了不完全的多线程执行。