D
derl2003
Unregistered / Unconfirmed
GUEST, unregistred user!
在使用Indy的服务器组件比如IdPop3server,它为每一个连接分配了独立的线程。Idpop3server的事件过程里有个Athread的参数就是专门管理单个连接的独立线程。现在我
自己定义了一个计时器,想在计时器事件里控制这些线程,比如说断开某个连接应该该怎
么办?我现在是定义一个结构体,
PClient = ^TClient;
TClient = record
Name : String;
Lasttime : TDateTime;
Thread : Pointer;
end;
在Idpop3server某个事件过程里定义一个结构体变量,把AThread赋给它的Thread,然后
用一个TThreadlist 变量Clients来管理全部的连接的线程。
不过当我从中取出结构体的Thread,
with Clients.LockListdo
begin
.....
ActClient:=Items[x];//ActClient是结构体变量
Remove(ActClient);
RecThread:=TIdPeerThread(ActClient.Thread);
try
RecThread.Connection.Disconnect;//用了后会出现服务器异常且关不掉,说是中
止线程超时。
memo2.Lines.Add(ActClient.Username+' 会话超时!已断开。');
//FreeAndNil(RecThread);用这个的话出现异常,非法线程句柄,不过没有出现中
止线程超时的现象,服务器也可正常关闭,但我不知道线程是否真的释放了。
finally
FreeMem(ActClient);
end;
.....
end;
......
请高手赐教啊,还有我想问直接用Athread.Connection.Disconnect是否断开连接并释放管理该连接的线程?
虚心等候你的回答...
自己定义了一个计时器,想在计时器事件里控制这些线程,比如说断开某个连接应该该怎
么办?我现在是定义一个结构体,
PClient = ^TClient;
TClient = record
Name : String;
Lasttime : TDateTime;
Thread : Pointer;
end;
在Idpop3server某个事件过程里定义一个结构体变量,把AThread赋给它的Thread,然后
用一个TThreadlist 变量Clients来管理全部的连接的线程。
不过当我从中取出结构体的Thread,
with Clients.LockListdo
begin
.....
ActClient:=Items[x];//ActClient是结构体变量
Remove(ActClient);
RecThread:=TIdPeerThread(ActClient.Thread);
try
RecThread.Connection.Disconnect;//用了后会出现服务器异常且关不掉,说是中
止线程超时。
memo2.Lines.Add(ActClient.Username+' 会话超时!已断开。');
//FreeAndNil(RecThread);用这个的话出现异常,非法线程句柄,不过没有出现中
止线程超时的现象,服务器也可正常关闭,但我不知道线程是否真的释放了。
finally
FreeMem(ActClient);
end;
.....
end;
......
请高手赐教啊,还有我想问直接用Athread.Connection.Disconnect是否断开连接并释放管理该连接的线程?
虚心等候你的回答...