【发布时间】:2018-01-31 06:03:32
【问题描述】:
我从Indy 10 TIdTCPServer 下载了一些有趣的代码并编译并运行了它。它有点乱,可能需要工作,但它是有趣的事情的良好基础。至少我不必在这里发布所有代码。无论如何,我决定首先需要停用ExampleServer,而不仅仅是在OnDestroy 中释放。所以我补充说:
procedure TServerPushExampleForm.FormClose(Sender: TObject);
begin
ExampleServer.Active := False; // bug here - never returns
end;
为了尝试调试此问题,我将 IdCustomTCPServer.pas 添加到项目中并进入其中。
在TIdCustomTCPServer.StopListening; 的LListener.WaitFor; 行中引发了一个异常此异常被捕获在TIdListenerThread.Run; 的异常处理程序中,但E.message 没有在那里检索,所以我不得不修改那里的代码以获得消息:
“操作中止”
在那之后我进一步追踪它,但代码执行最终还是回到了同一个异常处理程序。
这是一个错误还是永远不要将 Active 属性设置为 False 更好?在我的测试中,如果我关闭应用程序并让 RTL 管理所有空闲。没有发生无限循环(应用程序确实关闭了)
【问题讨论】:
-
这只是想法的糟糕实现,还是这里发现了一些更深层次的问题?
LListener.WaitFor;引发“操作中止”异常? -
这不是 Hey Fred 的网站。你能亲自为我调查一下这个帖子吗?如果您有一个特定的问题,请将问题写给任何选择阅读它的人。这不是社交网站、聊天室或论坛。仅供参考,您不能只使用@ ping 任何人;仅当您在评论中回复某人或对您的问题或答案发表评论时才有效。如果他们根本没有参与您的帖子,则 ping 不会到达他们。
-
好的,既然我已经引起了您的注意,您对这个问题有任何 cmet(甚至可能是答案)吗?
-
是的,我有意见。正如我之前所说,如果您有特定问题,请将问题写给阅读它的任何人和每个人,这意味着您需要对其进行编辑以使您的问题更加清晰和具体.
-
@Ken White:已排序。