多线程的疑惑!(50分)

S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在一个窗体中使用多线程来移动该窗口中的一个图片控件
因为要用到VCL,所以必须使用 Synchronize 来进行
但这样的话,使用多线程变得没有任何意义了,和不使用多线程没有两样
因此,我想让程序在后台移动一个控件(到了目的地就结束)
那我应该怎么办呢??
 

别不理我

Unregistered / Unconfirmed
GUEST, unregistred user!
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
而且我传递给线程的是两个 TCanvas
下面是这个线程的声明:
TMovebmp=class(TThread)
private
DstBmp,SrcBmp:TCanvas;
procedure move;
protected
procedure Execute;
override;
public
constructor Create(dBmp,sBmp:TCanvas);virtual;
end;
 
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
哈哈,我已经找到原因了
是我对线程使用不熟悉的原因
 
S

shangshang

Unregistered / Unconfirmed
GUEST, unregistred user!
有什么收获吗? 告诉一下大家,要不,把分分了吧。 呵呵
 
J

jasper

Unregistered / Unconfirmed
GUEST, unregistred user!
分享成果呀,兄弟
 
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,不好意思,我没看到,我说一下吧:
我使用过程move来对那两个Canvas进行操作,
我得目的是让 SrcCanvas中的图片一点点地拷贝到 DstCanvas中去
(在 DstCanvas 中也就形成了图片向上慢慢移动的感觉)
同时我还定义了变量 dTop 来保存拷贝到 DstCanvas 中的图片的顶部的位置
我一开始是在move过程中使用
while dTop>0do
begin
... //拷贝图片的过程
dTop-1;
end;

这样做的话,便使得这个多线程的存在没有任何意义,因为 Synchronize(move) 是占用主线程的
实际上应该在 excute 过程中这样做
repeat
Synchronize(move)
until Terminated;
然后在move过程中将while语句去掉,同时判断
if dTop<0 then
Terminate;
这样就可以了
 
S

searoom

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部