저는 Apache에서 실행되는 Delphi TWebModule 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.Content을 실행 한 후 제어가 계속 될 것이라고 생각했습니다. 그러나 그렇지 않습니다. 대신 코드 실행 절차를 완료 할 때까지 기다립니다.
어떻게하면됩니까? 브라우저가 대기 상태가되지 않도록 비동기 프로세스를 생성하는 방법은 무엇입니까?
그냥 자바 스크립트/아약스 클라이언트 페이지를 봉사 할 수 없습니다 대신 긴 과정을 시작 -
가가 : 는 여기에 귀하의 질문에 대한 대답 예입니다? –
나는 그것을 시도 할 수 있었다고 생각한다. AJAX는 나에게 조금 새로운 것입니다. 그리고 이상적으로 나는 클라이언트가이 과정을 시작하는 것을 원하지 않을 것입니다. 오히려 서버 측에 의지 할 것입니다. –
대답하기 전에 몇 가지 질문을하는 것이 중요합니다. 1. 웹 서버가 제공하는 웹 응용 프로그램이라고 가정합니다. 2. ISAPI 또는 CGI? –