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