如何释放线程资源,初学咋到,望不吝指教!!!!!!!!(100分)

B

BUSI

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Tserversocket工作在阻塞方式给客户开线程,我如何给线程释放资源,
具体的问题有以下几个:
1、我怎么知道什么时候线程结束
2、怎么终止线程
3、如何释放资源
4、我在线程中当客Closesocket时调用线程的Destroy,可程序好像不释放资源。
5、还有个大问题,我在Client端连接上Server时,第一次连接Server能开线程,可
当Client断线后,在联,Server就不再给开线程,不再能发数据!不知道是什么
原因。

望有高人能拯救我于水深火热中。
最后一个问题50分!!
 
to busi:
你的具体程序由于没有公开,我只能猜测一下原因,若有误,还请原谅。
1.你可以判断线程的 terminated是否为真。
2。可以调用线程的 Terminate终止线程
3.释放资源可以调用destroy或free;
4。不能释放资源的原因可能是你的线程还在运行,你必须先结束它。
5。你的Client断线后,可能是你的Server启动的线程没有释放,而Server认为
仍然是原来的线程,它发送的数据也可能是到你原来的Client。
 
to pcc_mmzl:
十分感谢你的帮助,你说的很对,但我不知道该何时结束线程
得到线程的程序如下:
procedure TMITS.SSGetThread(Sender: TObject;ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
var
ClientThread:TClientThread;
begin
ClientThread := TClientThread.Create(Table1,Table2,Query1,DataBase1,False, ClientSocket);
SocketThread := ClientThread;
end;

//TClientThread= class(TServerClientThread)
我不知道该在程序何处结束线程,也不知道该在何处释放资源,释放资源我的方法是在
TClientThread类中,调用
public
destructor Destroy; override;
end;
destructor TClientThread.Destroy;
begin
inherited;
end;

我的做法是一旦出现sediscconect就调用destroy,但好像释放不了资源。
我希望的是一旦Client断了连接,或Server主动断开连接,Server端给开的线程
就结束,资源就收回。
如果能提供相关的例程,感觉不尽,望各位看到的能拉我一把,多谢了
 
顶部