【发布时间】:2012-06-26 18:18:54
【问题描述】:
我有一个 Indy 服务器TIdTCPServer,它有 3 个用于不同端口的绑定。如果我将客户端连接到这 3 个端口,然后停用服务器,它就会陷入似乎是死锁的状态。无论我做什么,它都不会响应我的点击,甚至不会向 Windows 报告“不响应”。如果我在停用服务器之前断开客户端,一切都会完美。我的意思是“停用”,如Server.Active:= False;。
有其他人经历过吗?可能是什么原因造成的?我在这里没有发生任何跨越线程的事情,这反过来又会导致死锁(例如 GUI 更新)。我尝试了一个防冻组件TIdAntiFreeze,但没有运气。
【问题讨论】:
-
如果您没有连接会发生什么情况是否正确停用?如果是这样,请尝试在停用服务器之前终止来自客户端的连接
-
是的,如果没有更多的客户端连接,它会成功停用。
-
TIdTCPServer 的
Active属性设置器会自动断开所有活动的客户端连接。但它也必须等待这些线程终止,如果这些线程没有正确终止,通常是由于事件处理程序代码中的用户错误,就会发生这种死锁。我们需要看看 Jerry 的实际代码。 -
感谢@Remy,因为我正在 Indy 的
TIdCustomTCPServer.TerminateAllThreads中阅读您的 cmets...除非“RLebeau”是其他人? :P 证明你知道你在说什么 -
是的,就是我。我是 Indy 开发团队的一员。
标签: delphi delphi-xe2 deadlock indy indy10