首页 > 解决方案 > 我可以在 TIdTCPServer.OnExecute 事件中使用 Exit

问题描述

在 TIdTCPServer.OnExecute 事件中添加队列命令后,我可以使用 Exit 吗?

if condition then
begin
  MyNotify          := TMyNotify.Create;
  MyNotify.FMyData  := Format('%s > %d > %s, [TimeToStr(Now), AContext.Connection.Socket.Binding.Handle, AContext.Binding.PeerIP]);
  MyNotify.Notify;

  Con.Queue.Add('DCCUSTOMER');
  exit;
end;

还是会导致死锁或其他问题?

标签: delphiindy

解决方案


是的,您可以ExitTIdTCPServer.OnExecute事件处理程序中使用。

OnExecute事件在 TCP 连接的生命周期内连续循环触发。退出OnExecute处理程序是完全正常的,事件将再次被触发。这允许您编写更简单的处理程序代码,因为您一次只需编写一次迭代的代码。最常见的用例是读取和处理一个命令,然后退出(隐式或显式,没关系),当再次触发事件时重复下一个命令。

关闭套接字或引发未捕获的异常,将终止循环。


推荐阅读