procedure TMyThread.Execute; begin FreeOnTerminate:= True; gQuery:= 1; over:=true;////////////////judgement! end;procedure TForm1.Button1Click(Sender: TObject); var testThread: TMyThread; begin testThread:= TMyThread.Create(False); repeat ...../////some codes that not important until(over=true) showmessage(inttostr(gQuery)); end; procedure TForm1.FormCreate(Sender: TObject); begin gQuery:= 0; over:=false; end; ///这样应该可以,但太浪费CPU时间了。。
procedure TForm1.Button1Click(Sender: TObject); var testThread: TMyThread; begin testThread:= TMyThread.Create(False); testthread.Execute; showmessage(inttostr(gQuery)); end; 你试试!!我试过,很理想!!!
procedure TMyThread.Execute; begin FreeOnTerminate:= True; //在运行完后自动结束,非常有必要。 Onterminate := OnThreadTerminateend; end;procedure OnThreadTerminate(Sender: TObject); begin end;
2。thread.terminated
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(Suspended: Boolean);
end;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
gQuery: Integer;implementation{$R *.dfm}constructor TMyThread.Create(Suspended: Boolean);
begin
inherited Create(Suspended);
FreeOnTerminate:= True;
end;procedure TMyThread.Execute;
begin
FreeOnTerminate:= True;
gQuery:= 1;
end;procedure TForm1.Button1Click(Sender: TObject);
var
testThread: TMyThread;
begin
testThread:= TMyThread.Create(False);
showmessage(inttostr(gQuery));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
gQuery:= 0;
end;end.
我想返回的结果是1,但返回的结果仍为0
把你的按纽事件中procedure TForm1.Button1Click(Sender: TObject)
改为
testThread:= TMyThread.Create(False);
sleep(5); //加上就行了
showmessage(inttostr(gQuery));
begin
FreeOnTerminate:= True; // 这句有必要吗?
gQuery:= 1;
end;对于第二个问题
判断线程结束
定义函数procedure OnThreadTerminate(Sender: TObject);
再其中写上线程终止后要做什么
在创建线程时 记得要testThread.Onterminate := OnThreadTerminate;
你加这么句看看,
testthread.Resume; showmessage(inttostr(gQuery));
begin
FreeOnTerminate:= True;
gQuery:= 1;
over:=true;////////////////judgement!
end;procedure TForm1.Button1Click(Sender: TObject);
var
testThread: TMyThread;
begin
testThread:= TMyThread.Create(False);
repeat
...../////some codes that not important
until(over=true)
showmessage(inttostr(gQuery));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
gQuery:= 0;
over:=false;
end;
///这样应该可以,但太浪费CPU时间了。。
procedure TForm1.Button1Click(Sender: TObject);
var
testThread: TMyThread;
begin
testThread:= TMyThread.Create(False);
testthread.Execute;
showmessage(inttostr(gQuery));
end;
你试试!!我试过,很理想!!!
begin
FreeOnTerminate:= True; //在运行完后自动结束,非常有必要。
Onterminate := OnThreadTerminateend;
end;procedure OnThreadTerminate(Sender: TObject);
begin
end;