熟悉多线程的朋友请进来看一下 ( 积分: 100 )

  • 主题发起人 主题发起人 9278707
  • 开始时间 开始时间
9

9278707

Unregistered / Unconfirmed
GUEST, unregistred user!
我用多线程为图片打标时为什么有的图片能打上,有的却不行?但是同样的代码不使用多线程就没问题?代码如下
tmpImg.Picture.LoadFromFile(FName);
with tmpBmp do
begin
Width := actwidth;
Height := actheight;
PixelFormat := pf24bit;
Canvas.StretchDraw(Rect(0,0,actwidth,actheight), tmpImg.Picture.Graphic);
end;
tmpImg.Picture.Bitmap.Assign(tmpBmp);
with tmpImg.Canvas do
begin
Brush.Style := bsClear;
Font := sFont;
TextOut(MarkLeft, MarkTop, MarkTxt);
end;
 
我用多线程为图片打标时为什么有的图片能打上,有的却不行?但是同样的代码不使用多线程就没问题?代码如下
tmpImg.Picture.LoadFromFile(FName);
with tmpBmp do
begin
Width := actwidth;
Height := actheight;
PixelFormat := pf24bit;
Canvas.StretchDraw(Rect(0,0,actwidth,actheight), tmpImg.Picture.Graphic);
end;
tmpImg.Picture.Bitmap.Assign(tmpBmp);
with tmpImg.Canvas do
begin
Brush.Style := bsClear;
Font := sFont;
TextOut(MarkLeft, MarkTop, MarkTxt);
end;
 
最好你用到的tmpImg和tmpBmp两个对象都是线程自己创建的,否则如果是窗体上的,多线程就要同步了!不同步是不行的,因为vcl不是线程安全的。
 
楼上的完全正确,注意同步
 
哥们,不是你们说的原因,我试过了。
 
线程的运行有很多不确定性,把你的线程代码也贴出来。
 
我又遇到过。加锁即可
Canvas.Lock
........
Canvas.StretchDraw.............
.......
Canvas.Unlock ;
 
加锁不行:(
 
首先问一个问题,你用多线程的意图是什么?还有就是,你不使用多线程就没有问题,这是什么意思?我想先搞清楚这两个问题!
 
后退
顶部