阅读这个问题:
Delphi Windows Service Design ,我看到大多数设计者在 TService
的 OnExecute
或 TThread
方法中使用下面的代码,以保持服务存活。
while not Terminated do
begin
// do something
end;
但是如果我需要(并且我确实)创建一个服务来响应(使用 Indy)主应用程序发送的消息以便发回一些身份验证数据,我该如何处理这段代码,忽略它或把一些 Sleep()
放进去?
最佳答案
Indy 的 TIdTCPServer
和 TIdUDPServer
组件是多线程的,因此您根本不需要使用 TService.OnExecute
事件.您可以在 TService.OnStart
事件中激活它们并在 TService.OnStop
事件中停用它们,然后将处理程序分配给 TIdTCPServer.OnExecute
和 TIdUDPServer.OnUDPRead
事件。这两个事件都已经为您循环,因此您不需要在它们中使用 while not Terminated
循环。只需根据需要读取/处理一个请求,然后退出,并等待下一个事件重复。让服务器处理引发的任何异常。请记住,TIdUDPServer
有一个默认情况下为 False 的 ThreadedEvent
属性,因此您应该在服务中将其设置为 True。
关于Delphi 服务监听 TCP 或 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865131/