本帖最后由 sandok 于 2009-10-28 11:57:10 编辑

解决方案 »

  1.   

    IdTCPClient1.IOHandler.CloseGracefully加这个这样试下.
      

  2.   

    服务端关闭时(IdTCPServer.Active设为False)有时程序会死掉,不知道为什么??
      

  3.   

    似乎还是线程的问题:
    以下修改indy的pas文件的方法,虽然不能完全解决问题,至少有点提示作用在idThread类中增加一个公开的方法ProcessMessages,然后在TerminateYarn中调用。代码如下procedure TIdThread.ProcessMessages;
    begin
    {$IFDEF MSWINDOWS}
    if GetCurrentThreadID = MainThreadID then
    begin
    CheckSynchronize;
    Application.ProcessMessages;
    end;
    {$ENDIF}
    {$IFDEF LINUX}
    if GetCurrentThreadID = MainThreadID then
    begin
    CheckSynchronize(1000);
    end;
    {$ENDIF}
    end;procedure TIdSchedulerOfThread.TerminateYarn(AYarn: TIdYarn);
    var
    LYarn: TIdYarnOfThread;
    begin
    LYarn := TIdYarnOfThread(AYarn);
    if LYarn.Thread.Suspended then begin
    // If suspended, was created but never started
    // ie waiting on connection accept
    LYarn.Thread.Free;
    FreeAndNil(LYarn);
    end else begin
    // Is already running and will free itself
    LYarn.Thread.Stop;
    LYarn.Thread.ProcessMessages; //此处增加了处理。
    // Dont free the yarn. The thread frees it (IdThread.pas)
    end;
    end;TidThread所在单元增加uses{$IFDEF MSWINDOWS}
    Windows, Forms,
    {$ENDIF}