Delphi 应用程序共享管理器在 2020-2039 年期间保留 20 个端口来启动其通信线程。我想知道当第 21 个应用程序在同一台计算机上启动时会发生什么。事实证明,这个应用程序只是挂起无响应,直到它被杀死,而且我还没有找到一种优雅地终止它的方法。
要重现,只需将 TTetheringManager 和 TTetheringProfile 放在一个空表单上,将配置文件连接到 Manager,编译,在 IDE 外启动应用程序 20 次,最后在 IDE 中启动第 21 个实例。
这是我到目前为止发现的:
在System.Tether.NetworkAdapter 中:过程 TTetheringNetworkManagerCommunicationThread.Execute;当TCP 或 UDP 通信服务器无法启动时,将引发ETetheringException.Create(SManagerNetworkCreation) 。到目前为止,一切都很好。
此异常显示在调试器中。当我继续并逐步执行以下代码时,应用程序最终挂在System: 函数 AcquireExceptionObject 中并且永远不会返回。
由于应用程序是在 Application.Run 期间引发的,我尝试通过以下方式捕获异常:
try
Application.Run;
except
ShowMessage('Something went terribly wrong!');
end;
但这没有用。有什么建议我可以捕捉(或防止)这个异常吗?