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