delphi - Indy TCP 服务器停用时卡住

标签 delphi delphi-xe2 deadlock indy indy10

我有一个 Indy 服务器 TIdTCPServer,它有 3 个不同端口的绑定(bind)。如果我将客户端连接到这 3 个端口,然后停用服务器,它就会陷入死锁。无论我做什么,它都不会响应我的点击,甚至不会向 Windows 报告“没有响应”。如果我在停用服务器之前断开客户端连接,一切都会变得完美。我的意思是“停用”,如 Server.Active:= False; 中所示。

还有其他人经历过这种情况吗?可能是什么原因造成的?我这里没有发生任何交叉线程的事情,这可能会导致死锁(例如 GUI 更新)。我尝试了防冻组件 TIdAntiFreeze 但没有成功。

最佳答案

TIdTCPServer 是一个多线程组件。服务器停用期间的死锁意味着一个或多个客户端线程未正确终止。这通常意味着您的服务器事件处理程序正在做一些不应该做的事情,通常要么捕获并丢弃 Indy 的内部异常,要么与正忙于终止服务器的线程上下文同步,要么在 Indy 之外的其他事情上陷入死锁。如果没有看到您的实际代码,就无法确定实际情况如何,但导致这种死锁的总是用户错误。

TIdAntiFreeze 仅影响在主线程上下文中运行的 Indy 组件。 TIdTCPServer 没有。

关于delphi - Indy TCP 服务器停用时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213571/

相关文章:

delphi - 将文件从服务器复制到本地驱动器-什么会减慢获取文件的速度?

delphi - 如何将位图转换为视频?

delphi - 如何在不使用 Vidalia 的情况下强制 Tor 使用新身份?

macos - 如何使用Indy获取本地IP4地址?

delphi - 当表单上的 DoubleBuffered 为 True 时,TImage 上的 TButton 存在图形错误

c# - 单个 SQL Server 表上的死锁

.net - 我们是否有 bool 值的 Button down 属性

delphi - OnLoadEnd 从 Chromium 嵌入式框架调用多次

c++ - 为什么 system() 在 fork() 系统调用中使用 100% CPU?

Java死锁挑衅