我
我爱猪猪
Unregistered / Unconfirmed
GUEST, unregistred user!
最近在写一个比较大的程序,初次遇到多线程的问题.有两个Form,在Form1中有两个按钮和一个image,Form2中只有一个image,点Button1从文件中打开图片写到Form1的Image1上,点Button2,将Form1上的图片写到Form2的Image上(图片缩小,占据image的1/10面积),同时将
位图信息置换成每个象素点的灰度值,记录到一个很大的整型数组u里面,接下来对这个数组
进行一个很耗时的计算过程,结束之后,再点Button1,打开第二张图片,点Button2,重复刚才的过程. 现在的问题是想做成多线程,希望前一张图片还在处理的时候,能够打开另一张同时处理,使没有等待的感觉.
我在Form2所在的Unit里定义了线程
Type
Tmythread = class (TThread)
protected
procedure Execute;override;
end;
在Form2所在的Unit里定义了Execute过程,把那个耗时的计算放在这里面并且最开始有语句FreeOnterminent := True;
在Form1所在的Unit里
procedure TForm1.Button2Click(Sender: TObject);
begin
Tmythread.Create(false);
end;
如果是这样的话,等前一张图片计算完之后,再启动第二个线程计算后一张图片,结果是正确的.但若在前一张图片的计算过程中启动了第二张图片的计算,则两张图片都只计算了一部分,感觉第二个线程一启动,前一个就立马结束了(计算并没有完成)
发现这里有很多高手,不知道能不能帮我,谢谢了
位图信息置换成每个象素点的灰度值,记录到一个很大的整型数组u里面,接下来对这个数组
进行一个很耗时的计算过程,结束之后,再点Button1,打开第二张图片,点Button2,重复刚才的过程. 现在的问题是想做成多线程,希望前一张图片还在处理的时候,能够打开另一张同时处理,使没有等待的感觉.
我在Form2所在的Unit里定义了线程
Type
Tmythread = class (TThread)
protected
procedure Execute;override;
end;
在Form2所在的Unit里定义了Execute过程,把那个耗时的计算放在这里面并且最开始有语句FreeOnterminent := True;
在Form1所在的Unit里
procedure TForm1.Button2Click(Sender: TObject);
begin
Tmythread.Create(false);
end;
如果是这样的话,等前一张图片计算完之后,再启动第二个线程计算后一张图片,结果是正确的.但若在前一张图片的计算过程中启动了第二张图片的计算,则两张图片都只计算了一部分,感觉第二个线程一启动,前一个就立马结束了(计算并没有完成)
发现这里有很多高手,不知道能不能帮我,谢谢了