2

阅读这个问题: Delphi Windows Service Design,我看到大多数设计师OnExecuteTServiceTThread方法中使用下面的代码,以保持服务活着。

while not Terminated do
begin
  // do something
end;

但是,如果我需要(并且我确实)创建一个服务来响应(使用 Indy)主应用程序发送的消息以发回一些身份验证数据,我该怎么处理这段代码,忽略它或放入Sleep()一些它?

4

1 回答 1

7

IndyTIdTCPServerTIdUDPServer组件是多线程的,因此您根本不需要使用TService.OnExecute事件。您可以在事件中激活它们并在TService.OnStart事件中停用它们TService.OnStop,然后根据需要将处理程序分配给TIdTCPServer.OnExecuteTIdUDPServer.OnUDPRead事件。这两个事件都已为您循环播放,因此您不需要while not Terminated在其中循环播放。只需根据需要读取/处理一个请求,然后退出,并等待下一个事件重复。让服务器处理引发的任何异常。请记住,TIdUDPServer它的ThreadedEvent属性默认为 False,因此您应该在服务中将其设置为 True。

于 2013-07-25T18:55:03.077 回答