使用TWebModule的Delphi CGI(在IIS上),如何处理TThread?

时间:2018-07-12 09:04:48

标签: multithreading delphi iis cgi

在使用TWebModule制作的CGI中,我希望根据请求执行后台长时间操作,但发送瞬时响应:

procedure TMyWebModule.MyAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
   aMyThread : TMyThread;
begin
    Handled := true;
    aMyThread := TMyThread.Create;
    Response.Content := 'request is processing...';
end;

TMyThread

type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  public
    constructor Create;
  end;

implementation


constructor TMyThread.Create;
begin
 inherited Create(false);

 Self.FreeOnTerminate := true;
end;


procedure TMyThread.Execute;
begin
  WriteLog('START');
  try
    Sleep(20000);
  finally
      WriteLog('END');
  end;
end;

CGI似乎杀死了服务器响应线程,因为我发现了START但没有发现END。 IIS在响应时似乎关闭了连接,并将SIGTERM发送到CGI进程,这会杀死线程。

我如何处理CGI上的线程?

0 个答案:

没有答案