多线程(退出程序會出錯)???(50分)

  • 主题发起人 主题发起人 美女1号
  • 开始时间 开始时间

美女1号

Unregistered / Unconfirmed
GUEST, unregistred user!
由于數據量比較大導致程序程序根本拖不动,所以想用线程來改善一下,但苦于先前沒用過线程,所以想富翁們給我貼個例子.
 
如果只是想响应,用Application.ProcessMessages就可以,不用用
多线程.
 
你使用向导建立一个多线程的单元,在里面填自己的东西就好。
 
我在Thread Object中開一個线程(比如:unit 1),
然后在unit2中可以掉用它
procedure TForm1.Button4Click(Sender: TObject);
begin
mythread.create(false);
end;

出現的問題:
怎樣释放线程啊!我退出程序會出錯.
網上都說用Terminate,但不知道用在那里???
 
在form1的close或destroy事件中写:
if assigned(mythread) then
begin
mythread.Terminate;
mythread.WaitFor;
end;
 
mythread:=Tmythread.create(false);
mythread.free;
不知道可不可以
 
在form1的close或destroy事件中写:
if assigned(mythread) then
begin
mythread.Terminate;
mythread.WaitFor;
end;

出錯:
[Error] Unit1.pas(401): Variable required
[Error] Unit1.pas(403): This form of method call only allowed for class methods
//////////////以下是unit1單元
unit Unit1;
interface
uses
Classes,unit2,ComCtrls,Controls,SysUtils,DateUtils,Forms;
type
mythread = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
public
end;

implementation
procedure mythread.Execute;
begin

/////code
end;

end.
/////////////////////////
 
建立一个多线程的单元
 
if assigned(mythread) then
//[Error] Unit1.pas(401): Variable required //须要变量
begin
mythread.Terminate;
//[Error] Unit1.pas(403): This form of method call only allowed for class methods //这种方式的方法调用只能调用类方法
mythread.WaitFor;
//[Error] Unit1.pas(404): This form of method call only allowed for class methods
end;

mythread = class(TThread)
mythread 是个类类型,
调用 Terminate;
WaitFor;
要使用类实例,要在 TForm1 类中申请变量一个 mythread 类型的变量,
如 mythread1: mythread;
 
FreeOnTerminate:=true
讓線程自動釋放。。
 
多人接受答案了。
 
后退
顶部