IdTCPS: TIdTCPServer;  我想在IdTCPSExecute事件中接收一个指令,然后使用Application.Terminate;关闭应用程序。却关闭不了。执行Application.Terminate;之前,我有做AThread.Connection.Disconnect;当我使用IdTCPS.Active:=False;后,抛出异常:
Project Project1.exe raised exception class EIdTerminateThreadTimeout with Message 'Terminate Thread Timeout'。如果不使用IdTCPS.Active:=False就没有问题。
注明:我跟踪了Application.Terminate,它确实有执行。请问各位大虾,如果在IdTCPSExecute中关闭应用程序?

解决方案 »

  1.   

    如何断开?使用AThread.Connection.Disconnect了算不算断开?使用IdTCPS.Active:=False;后,抛出异常。
      

  2.   

    要如何才能完全关闭那个连接。我网络连接的我只用了两个。是TIdTCPClient,TIdTCPServer这个
    两个组件。client是每次连接后都自动断开。而且我在接收到关闭命令后,会检查该client是否断开,如果没有那么就断开。在tidtcpserver的那个事件中,一接到关闭命令后,会先将AThread断开,然后在application.Terminate。请各位详细说明一下。我现在是一个头两个大。急用。
      

  3.   

    在执行Application.Terminate;之前先判断一下是否已经断开!
      

  4.   

    IdTCPSExecute是异步执行的。我是这样处理
    建一个自定义消息处理函数procedure MessageHandler(var Msg:TMessage);message CU_CLOSEMESSAGE;在这个函数里关闭。
    IdTCPSExecute中就sendmessage(self.Handle, CU_CLOSEMESSAGE,0,0); 就可以了。
    你试试看