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