请好人帮我分析一下为什么出错(100分)

  • 主题发起人 主题发起人 wzgss
  • 开始时间 开始时间
W

wzgss

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个多线程操作CANVAS的程序,模仿DELPHI5/HELP/Prgrsbar/下的例子,线程内
通过消息通知线程是否在运行.我定义了多个线程类型,线程内就是操作PAINTBOX的
CANVAS(图象特技,或输出字).用了LOCK和UNLOCK.线程外(主线程)也有操作
PAINTBOX.CANVAS的(如清除画布工作).就是这些,我调试经常会出现死掉错误.有的
时候在鼠标移动PATBOX的PARENT的窗体时也错误.请帮我分析一下应该怎么做.---
画布是线程安全的,LOCK,UNLOCK什么时候用.线程内,线程外是否要先锁住?
我说的不详细,但请各位帮助我应注意的事情.
 
画布真的是线程安全的.....吗?不是!
LOCK,UNLOCK什么时候用?
本来任何对画布的操作都应该用LOCK和UNLOCK,那么画布就是线程安全的了。很可惜,
VCL中所有的画图(如MOVETO,LINETO)都没有用它。因此你在线程中怎么LOCK都没有
用,因为你不能保证主线程在画图时会LOCK。如果不是VCL,如TBITMAP,都是你自己
用的,你就可以在每当使用CANVAS时都用LOCK和UNLOCK进行线程同步;如果是VCL,你
就别操这份心,基本上可以不用它们。
多线程VCL画图的程序,基本上都是用Synchronize与主线程同步;最好是先画到内部
的一个BITMAP缓冲中(这个不是VCL),再用Synchronize一次性地PAINT到VCL上。
 
谢谢huzzz大哥的点解,
谁还有更详细的讲解
 
后退
顶部