现在我的TCPServer的工作线程都没有异常,但是当大量客户端以高速连接的时候,为什么停止TCPServer(ACtive := False;)的时候会报告线程停止错误?请指教。
急!在线等。
急!在线等。
解决方案 »
- 谁研究过RealICQ源代码请教一些问题
- 问一个利用UPDOWN控件控制多个EDIT出现的position问题
- 请教 VBA转化为DELPHI代码
- DBGrid的数据源DataSource在设成DataSource1后如何在DataSource1.DataSet从数据库获取数据后获取每个字段内容
- 关于工作的事。同事给我介绍工作....
- 使用主从表还是一个表
- 急急急!!!!!在线等待,如何把图片直接作为窗体的背景??????????
- 如何动态生成函数名?up有分!!!!
- 如何以变量做为属性的名称给属性赋值?也说不清,还内容吧!高手请指教!
- 一个关于label的小问题?
- 问一个关于登陆另一台电脑的问题(WnetAddConnection2函数)?
- 怎样在点击DBGrid中的表头出现排序的那个小三角符号??
procedure TARRequest.TCPServerExecute(AThread: TIdPeerThread);
var
flag:integer;
begin
{$IFDEF RELEASE}
AThread.Connection.ReadTimeout:=FReadTimeOut;
{$ENDIF}
if not FStart then
begin
AThread.Connection.Disconnect;
AThread.Terminate;
exit;
end; try
flag:=GetSysFlag(AThread.Connection);
if flag=SysCommFlagClt_V1 then
ClientRecieve(AThread)
else
if flag=SysCommFlagMAR_V1 then
MARRecieve(AThread)
else
begin
Raise Exception.Create('Illegal user');
end;
except
AThread.Connection.Disconnect;
//AThread.Terminate;
end;
if AThread.Connection.Connected then
AThread.Connection.ReadLn();
end; 在调试的时候没有报任何异常错误,但是仍然报错。nyf1220(我是党员)
看看这里线程有没有被正常的断开或者销毁,如果没有,应该在哪里啊?----------------------------------------------------------------
花自飘零水自流,一种相思,两处闲愁。
此情无计可消除,才下眉头,又上心头。
----------------------------------------------------------------
Indy的Bug!!修改unit IdTCPServer;
的
procedure TIdTCPServer.SetActive(AValue: Boolean);
var
i: Integer;
LListenerThread: TIdListenerThread;
begin
// SG 28/11/01: removed the "try..finally FActive := AValue; end;" wrapper
// SG 28/11/01: It cause the component to be locked in the "active" state, even if
// SG 28/11/01: the socket couldn't be bound.
if (not (csDesigning in ComponentState)) and (FActive <> AValue)
and (not (csLoading in ComponentState)) then begin
if AValue then begin
// InitializeCommandHandlers must be called only at runtime, and only after streaming
// has occured. This used to be in .Loaded and that worked for forms. It failed
// for dynamically created instances and also for descendant classes.
if not FCommandHandlersInitialized then begin
FCommandHandlersInitialized := True;
InitializeCommandHandlers;
end;
// Set up bindings
if Bindings.Count = 0 then begin
Bindings.Add;
end; // Set up ThreadMgr
ThreadMgr.ThreadClass := ThreadClass; // Setup IOHandler if not Assigned(FIOHandler) then begin
IOHandler := TIdServerIOHandlerSocket.Create(self);
FImplicitIOHandler := true;
end;
// Update reply texts for "global" replies
ReplyTexts.UpdateText(ReplyUnknownCommand);
ReplyTexts.UpdateText(MaxConnectionReply);
// Set up listener threads IOHandler.Init;
i := 0;
try
while i < Bindings.Count do begin
with Bindings[i] do begin
AllocateSocket;
if (FReuseSocket = rsTrue) or ((FReuseSocket = rsOSDependent) and (GOSType = otLinux))
then begin
SetSockOpt(Id_SOL_SOCKET, Id_SO_REUSEADDR, PChar(@Id_SO_True), SizeOf(Id_SO_True));
end;
Bind;
end;
Inc(i);
end;
except
Dec(i); // the one that failed doesn't need to be closed
while i >= 0 do begin
Bindings[i].CloseSocket;
Dec(i);
end;
FActive := True;
SetActive(False); // allow descendants to clean up
raise;
end;
FListenerThreads := TThreadList.Create;
for i := 0 to Bindings.Count - 1 do begin
Bindings[i].Listen(FListenQueue);
LListenerThread := TIdListenerThread.Create(Self, Bindings[i]);
FListenerThreads.Add(LListenerThread);
LListenerThread.Start;
end;
FActive := True; // fixed by Liu Yang 2007.7.24 end else begin
TerminateListenerThreads;
FActive := false; // fixed by Liu Yang 2007.7.24
// Tear down ThreadMgr
try
TerminateAllThreads;
finally
if ImplicitThreadMgr and TIdThreadSafeList(Threads).IsCountLessThan(1) then begin // DONE -oAPR: BUG! Threads still live, Mgr dead ;-(
FreeAndNil(FThreadMgr);
FImplicitThreadMgr := False;
end;
end;//tryf
end;
end;
end;
就完美解决问题,适用于Indy9.0.17版,AtoZed.com可以下载的http://lysoft.7u7.net
其他使用最新的Indy9.0.17看看了,Delphi自带的Bug很多的http://lysoft.7u7.net
能不能通过自身代码解决这个问题,不修改unit IdTCPServer
谢谢:)----------------------------------------------------------------
花自飘零水自流,一种相思,两处闲愁。
此情无计可消除,才下眉头,又上心头。
----------------------------------------------------------------
谢谢各位:)结贴
----------------------------------------------------------------
花自飘零水自流,一种相思,两处闲愁。
此情无计可消除,才下眉头,又上心头。
----------------------------------------------------------------