Ben*_*eny 3 delphi multithreading indy
这是我第一次使用Delphi处理多线程应用程序,所以对我来说仍然很好,但我读了很多.
我的线程很简单,简而言之我只是使用Indy(IdHTTP)来获取网页的内容,然后我验证内容是否包含字符串.这里没问题.
现在,为了终止线程,我使用带有WHILE DO的布尔值.它似乎有效但问题就在于:就像我在Indy中使用Timeout一样,有时我必须等待线程结束前的超时时间结束(例如服务器没有响应时)...
这很烦人,特别是当我使用+200线程时.使用其他软件使用多线程和类似的程序,当我点击"停止"时,所有都在几秒钟内停止,这就是我需要的.
我读到我应该使用AntiFreeze,以允许IdHTTP"阅读我的指示"......
所以,我在这里有点迷失.我不认为这是非常必要的,但这是我的代码:http://pastebin.com/G7De8bgb
在此先感谢灯光:)
贝尼
这堂课TidHTTP有一个OnWork活动.使用此事件取消数据下载或上传.如何取消此活动?解雇Abort无声的异常.
这是一个伪代码:
THTTPThread = class(TThread)
private
HTTPComponent: TidHTTP;
procedure OnHTTPProgress(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
published
procedure execute();
end;
implementation
procedure THTTPThread.execute;
begin
Self.HTTPComponent := TidHTTP.Create(nil);
with HTTPComponent do
begin
OnWork := Self.OnHTTPProgress;
Get('http://www.google.com');
end;
end;
procedure THTTPThread.OnHTTPProgress(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
if Self.Terminated then
Abort;
end;
Run Code Online (Sandbox Code Playgroud)
考虑到调用OnWork的阶段是随机的.事件可以在请求的中间,乞讨甚至结束时调用.上面的代码就像按下浏览器上的停止按钮一样.
[更新]忘记提一下,如果当线程被挂起以回复服务器时未调用OnWork事件,则如果在指定的毫秒之前收到"最后一个响应",则使用可以使用超时.使用GetTickCount此.