我有一个 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/