2012-04-02 116 views
0

我在線程內部有此代碼,並且當我調用終止時,如果它不在http請求的中間,它會很快終止,但是當我有20個線程時,需要時間來完成http請求並退出線程。 CODE:使用http獲取請求終止的線程終止

procedure TParser.Execute; 
var 

    i,b:integer; 
    t:string; 
    begin 
http := thttpsend.create; 
http.KeepAlive:=true; 
Ftest:=TStringList.Create; 
{http.timeout:=5000;} 
for i:=0 to FStartNum.Count do 

if FLocalVariable<FStartNum.Count-FThreadCount then 
begin 
if terminated then begin 
exit; 
end 
else 

EnterCriticalSection(Form1.StringSection); 
try 



FLocalVariable := form1.GlobalVariable; 
Inc(FLocalVariable); 
form1.GlobalVariable := FLocalVariable; 


finally 

LeaveCriticalSection(Form1.StringSection); 
http.Clear; 

HTTP.HTTPMethod('GET',FStartNum.Strings[FLocalVariable]); 
     Ftest.LoadFromStream(HTTP.Document); 

     Synchronize(progress); 
parse; 
Ftest.Clear; 

end; 
end; 
end; 

如何停止從主要形式是HTTP請求:

HTTP.HTTPMethod('GET',FStartNum.Strings[FLocalVariable]); 
      Ftest.LoadFromStream(HTTP.Document); 

感謝

編輯:終端代碼:

for i:=Low(fparser) to High(fparser) do 
    begin 
    Fparser[i].Terminate(); 

    end; 

回答

1

調用THttpSend.Abort()方法停止正在進行的轉移。你可以做的是,在THttpSend.OnStatus事件,如:

procedure TParser.Execute; 
var 
    ... 
begin 
    http := THttpSend.Create; 
    http.OnStatus := HttpStatus; 
    ... 
end; 

procedure TParser.HttpStatus(Sender: TObject; Reason: THookSocketReason; const Value: String); 
begin 
    if Terminated then Http.Abort; 
end; 
+0

嘗試,並曾在這裏做申報像一些程序http://forum.4programmers.net/Delphi_Pascal/129730-Synapse_FTPSend?sort=votes 現在我得到[Error] Unit5.pas(115):不兼容的類型:'blcksock.THookSocketReason'和'Unit5.THookSocketReason'。我應該在使用列表中聲明更多單位。謝謝。 編輯:添加blcksock使用和它的作品。謝謝 – 2012-04-02 20:04:54

+1

Unit5不應該聲明自己的'THookSocketReason'類型,而是使用'blcksock' unt中的那個類型,那麼你就不會得到ambiquity錯誤。 – 2012-04-02 21:32:17