TIdTCPServer.Active := False的研究

来源:互联网 发布:linux 创建文件命令 编辑:程序博客网 时间:2024/04/27 13:40

设置TIdTCPServer的Active为False的这个操作存在着一些问题:

1. 在设置Active为False时, 将结束所有已连接的客户端线程(PeerThread), 这个结束操作是有超时检测的(超时的时长可以通过TerminateWaitTime属性进行设置)。如果超时, 则抛出超时异常,这个异常在Delphi的IDE环境中无法屏蔽,给调试程序带来很多不便。而且,出现超时异常时,TIdTCPServer并未正常关闭,还得再次设置Active为False。

2. 从设置Active为False开始到所有PeerThread线程结束或者抛出超时异常,主进程将阻塞,主进程的界面将无响应。

这些问题都是让人不能接受的。

 

研究了一下Indy的源码,写了下面这段代码,来解决TIdTCPServer.Active := False的问题。

 

原创粉丝点击