初学多线程编程,用TThread.主程序退出的时候,这些线程可以正常退出,但是我想这些线程执行完毕就自动退出.
在debug的时候,只看到Thread start:Thread ID:xxxx.没有看到Thread Exit.procedure TProcess.Execute;
var
i:integer;
begin
FreeOnTerminate :=true;
for i:=0 to 10 do
begin
if not Terminated then
checkDate();//执行函数
end;
form1.Memo1.Lines.Add('线程执行完毕!');//有正常输出执行完毕.
// Terminate;//添加Terminate也不行
end;请问怎样才能,循环执行checkDate之后退出线程呢.
在debug的时候,只看到Thread start:Thread ID:xxxx.没有看到Thread Exit.procedure TProcess.Execute;
var
i:integer;
begin
FreeOnTerminate :=true;
for i:=0 to 10 do
begin
if not Terminated then
checkDate();//执行函数
end;
form1.Memo1.Lines.Add('线程执行完毕!');//有正常输出执行完毕.
// Terminate;//添加Terminate也不行
end;请问怎样才能,循环执行checkDate之后退出线程呢.
type
TProcess = class(TThread)
protected
procedure Execute; override;
procedure checkDate;
public
destructor Destroy; override;
end;procedure TProcess.checkDate;
begin
Form1.Memo1.Lines.Add('checkDate');
end;destructor TProcess.Destroy;
begin
inherited;
Form1.Memo1.Lines.Add('Destroy');
end;procedure TProcess.Execute;
var
i:integer;
begin
FreeOnTerminate :=true;
for i:=0 to 10 do
begin
if not Terminated then
checkDate();//执行函数
end;
end;
begin
inherited;
Form1.Memo1.Lines.Add('Destroy');
WaitExecute;
end;
procedure TProcess.WaitExecute;
begin
Terminate;
WaitFor;
end;
FreeOnTerminate :=true; // 设置这个,就是让线程Execute结束后自动调用Destroy,所以不用在Destroy中等待Execute结束,找书看
destructor TThread.Destroy;
begin
if not FFinished and not Suspended then
begin
Terminate;
WaitFor;
end;
if FHandle <> 0 then CloseHandle(FHandle);
inherited Destroy;
RemoveThread;
end;