【发布时间】:2012-01-20 07:06:12
【问题描述】:
我有一个在 Apache 上运行的基于 Delphi TWebModule ISAPI 的项目。我的一个事件处理程序包含可能需要几分钟才能处理的逻辑。我想生成一个单独的进程/线程来执行逻辑并将 html 立即返回给浏览器。该 html 将具有 AJAX 客户端调用以获取进程进度的定期更新。
我曾尝试使用 TThread,但发现它会等待 Execute 代码结束后再返回。
例子:
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 之后立即继续。但事实并非如此。相反,它会等待 Execute 过程中的代码完成。
我怎样才能做到这一点?如何生成异步进程以使浏览器不处于等待状态?
【问题讨论】:
-
你不能只提供页面并让 javascript/ajax 客户端启动漫长的过程吗?
-
我想我可以试试。 AJAX 对我来说有点新。理想情况下,我不希望客户端启动此过程。宁愿依赖服务器端来。
-
在回答之前,问一些问题很重要: 1. 我是否假设这是一个由 Web 服务器提供的 Web 应用程序? 2. ISAPI 还是 CGI?
-
好吧,最终还是由客户端(浏览器)发起进程(通过访问 URL)。
-
@NickHodges:Apache 上的 ISAPI。
标签: delphi delphi-2007