这是我第一次使用 Delphi 开发多线程应用程序,所以一切对我来说仍然很新鲜,但我读了很多书。
我的线程很简单,简而言之,我只是使用 Indy (IdHTTP) 来获取网页的内容,然后验证内容是否包含字符串。这里没有问题。
现在,为了终止线程,我使用带有 WHILE DO 的布尔值。它似乎有效,但问题是:就像我在 Indy 中使用超时一样,有时我必须在线程完成之前等待超时周期结束(例如,当服务器没有响应时)...
这很烦人,尤其是当我使用+200个线程时。对于使用多线程和类似过程的其他软件,当我单击“停止”时,所有软件都会在几秒钟内停止,这就是我所需要的。
我读到我应该使用防冻剂,以允许 HTTP“读取我的指令”......
所以,我在这里有点迷失了。
我认为这不是很有必要,但这是我的代码:http://pastebin.com/G7De8bgb
预先感谢您的灯光:)
Beny
班上TidHTTP
has an OnWork
事件。使用此事件取消数据下载或上传。如何取消此活动?引发中止静默异常。
这是伪代码:
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;
请考虑调用 OnWork 的阶段是随机的。该事件可以在请求中间、请求时甚至结束时调用。上面的代码将像按下浏览器上的停止按钮一样工作。
[更新]
忘记提及的是,如果在线程挂起等待服务器回复时未调用 OnWork 事件,则如果在指定毫秒前收到“最后响应”,则用户可以使用超时。使用GetTickCount
为了这。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)