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