我有一个德尔福TWebModule在Apache上运行的基于ISAPI的项目。我的一个事件处理程序包含可能需要几分钟才能处理的逻辑。我想生成一个单独的进程/线程来执行逻辑并立即返回HTML到浏览器。该html将有AJAX客户端调用来定期更新过程进度。TWebModule处理程序中产生一个新的线程/进程
我一直在使用的TThread尝试,但发现它等待执行代码返回前结束。
实施例:
procedure Tmainweb.DoLongProcess(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
ProcessThread: TProcessThread;
begin
ProcessThread := TProcessThread.Create(True);
ProcessThread.Execute;
Handled := True;
Response.Content := '<html><body>Processing - would also include ajax stuff to get periodic updates</body></html>
end;
TProcessThread是我的处理线程这可能需要分钟才能完成。当我运行这个应用程序时,我认为控制会在ProcessThread.Execute后继续执行。但事实并非如此。而是等待执行过程中的代码完成。
我该如何做到这一点?如何产生一个异步过程,使浏览器不处于等待状态?
你就不能提供网页,让的JavaScript/AJAX客户端发起的漫长的过程呢? – 2011-12-14 14:02:22
猜猜我可以试试。 AJAX对我来说有点新鲜。理想情况下,我不希望客户发起这个过程。宁愿依靠服务器端来。 – 2011-12-14 14:13:25
在回答之前,问一些问题很重要:1.我的假设是这是一个由Web服务器提供的Web应用程序吗? 2. ISAPI或CGI? – 2011-12-14 14:41:53