gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:50:38 31 4
gpt4 key购买 nike

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com