服务端使用的是Idtcpserver
用一个timer检测客户端是否异常退出,如果是,则终止该线程:
procedure Tform1.Timer1Timer(Sender: TObject);
var
i, ti: Integer;
ll: Tlist;
begin
try
for ti := 0 to listview1.Items.Count - 1 do
begin
if strtoint(trim(listview1.Items[ti].SubItems.Strings[3])) > 50 then
begin
try
ll := TCPServer.Threads.LockList;
with ll do
begin
for i := 0 to Count - 1 do
begin
if TIdPeerThread(Items[i]).Connection.Socket.Binding.PeerIP = trim(listview1.Items[ti].SubItems.Strings[0]) then
begin
try
TIdPeerThread(Items[i]).Stop;
listview1.Items[ti].Delete;
Break;
except
end;
end;
end;
end;
finally
TCPServer.Threads.UnlockList;
end;
end;
end;
except
end;问题是:当客户端(会自动检测服务端)连接后,把网线拔掉再插上,反复几次,服务端的CPU就100%了.
请问为什么?
用一个timer检测客户端是否异常退出,如果是,则终止该线程:
procedure Tform1.Timer1Timer(Sender: TObject);
var
i, ti: Integer;
ll: Tlist;
begin
try
for ti := 0 to listview1.Items.Count - 1 do
begin
if strtoint(trim(listview1.Items[ti].SubItems.Strings[3])) > 50 then
begin
try
ll := TCPServer.Threads.LockList;
with ll do
begin
for i := 0 to Count - 1 do
begin
if TIdPeerThread(Items[i]).Connection.Socket.Binding.PeerIP = trim(listview1.Items[ti].SubItems.Strings[0]) then
begin
try
TIdPeerThread(Items[i]).Stop;
listview1.Items[ti].Delete;
Break;
except
end;
end;
end;
end;
finally
TCPServer.Threads.UnlockList;
end;
end;
end;
except
end;问题是:当客户端(会自动检测服务端)连接后,把网线拔掉再插上,反复几次,服务端的CPU就100%了.
请问为什么?
var
i, ii: Integer;
begin
try
timer1.Enabled:=false;
for i := 0 to listview1.Items.Count - 1 do
begin
if trim(listview1.Items[i].SubItems.Strings[0]) = AThread.Connection.Socket.Binding.PeerIP then
begin
try
listview1.Items.Delete(i);
timer1.Enabled:=true;
break;
except
end;
end;
end;
except
end;
end;