我可以在 TIdTCPServer.OnExecute 事件中使用 Exit
Can I use Exit in TIdTCPServer.OnExecute event
我可以在 TIdTCPServer.OnExecute 事件中添加队列命令后使用退出吗?
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;
还是会造成死锁,或者其他问题?
是的,您可以在 TIdTCPServer.OnExecute
事件处理程序中使用 Exit
。
OnExecute
事件在 TCP 连接的生命周期内连续循环触发。从 OnExecute
处理程序退出是完全正常的,事件将再次被触发。这允许您编写更简单的处理程序代码,因为您一次只需为一个迭代编写代码。最常见的用例是读取和处理一个命令然后退出(隐式或显式,这无关紧要),当事件再次触发时重复下一个命令。
关闭套接字或引发未捕获的异常将终止循环。
我可以在 TIdTCPServer.OnExecute 事件中添加队列命令后使用退出吗?
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;
还是会造成死锁,或者其他问题?
是的,您可以在 TIdTCPServer.OnExecute
事件处理程序中使用 Exit
。
OnExecute
事件在 TCP 连接的生命周期内连续循环触发。从 OnExecute
处理程序退出是完全正常的,事件将再次被触发。这允许您编写更简单的处理程序代码,因为您一次只需为一个迭代编写代码。最常见的用例是读取和处理一个命令然后退出(隐式或显式,这无关紧要),当事件再次触发时重复下一个命令。
关闭套接字或引发未捕获的异常将终止循环。