如何释放我的线程?请高手指教!!!(150分)

  • 主题发起人 GuestUser
  • 开始时间
G

GuestUser

Unregistered / Unconfirmed
GUEST, unregistred user!
unit main;
...
public
myThread:SendThread;
...
procedure Tmainform.Button3Click(Sender: TObject);
begin
MyThread:=SendThread.Create(False);
end;

unit mySendThread;
interface
uses
Classes,SysUtils;
type
SendThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
procedure sendmessage();
public
constructor Create(Suspended:Boolean);
end;

constructor SendThread.Create(Suspended:Boolean);
begin
FreeOnTerminate := True;
inherited Create(Suspended);
end;

procedure SendThread.Execute;
begin
sendmessage;
end;

我现在执行了button3的事件以后,没有问题,当我再次执行时会出错,线程没有释放掉,
请教一下高手解答这个问题,谢谢~~~
 
这样试试吧
创建时
mythread:=TPasswordThread.Create(i,con_str,adocn);
myobj.add(mythread);
释放时
myobj.Remove(mythread);
 
能否具体一点呢???
MyThread.OnTerminate:=ThreadDone;
procedure Tmainform.ThreadDone(Sender: TObject);
begin
MyThread.Terminate;
end;

但是这样并不能释放掉。。。线程我是第一次用,所以不太清楚原理。。。
 
Thread的Terminate方法仅仅给Terminated置了一个True标志,所以如果你的Execute
方法里没有检测Terminated,那么他是不起作用的。默认情况下,线程在执行结束后
会自动释放掉的,根据你的情况也可以不使用它的自动释放功能(FreeOnTerminate:=False)
我一般习惯这么用,然后就可以随便了.:(
Execute:
while not Terminateddo
begin
//.....
end;

释放是这样
Thread.Terminate;
Thread.WaitFor;
Thread.Free;
 
谢谢两位指点,线程的问题我已经解决,不过还有一些问题,希望能够继续指教。
 
顶部