2

在使用TWebModulei 制作的 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 上的线程?

4

0 回答 0