我很混乱,清指点(100分)

  • 主题发起人 主题发起人 bjyplbx
  • 开始时间 开始时间
B

bjyplbx

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个线程类,里面用于采集网页信息
TGetOnePage = class(TThread)
protected
Furl: string;
FTmpFile: string;
FHttpGetPage: THttpCli;
FCustUrlList: TStringList;
procedure Execute;
override;
private
procedure HttpGetPageDocbegin
(Sender: TObject);
procedure HttpGetPageDocEnd(Sender: TObject);
public
constructor Create(url: string;
tmpdir: string);
destructor Destroy;
override;
end;

在create里,对FHttpGetPage初始化
begin
inherited Create(false);
FreeOnTerminate := true;
FHttpGetPage := THttpCli.Create(nil);
FHttpGetPage.OnDocbegin
:= HttpGetPageDocbegin
;
FHttpGetPage.OnDocEnd := HttpGetPageDocend;
end;

我在excute里执行
begin
FHttpGetPage.url := Furl;
FHttpGetPage.Get;
while (not Terminated)do
;
end;

在 HttpGetPageDocEnd 里处理数据并结束线程
begin
try
...
finally
Terminate;
end;
end;

在destory中释放FHttpGetPage
begin
if Assigned(FHttpGetPage) then
FreeAndNil(FHttpGetPage);
inherited;
end;

就报错了,对地址 00000000 访问,什么问题呢,我的这个写法是不是不和逻辑啊
 
问题解决了,但是不知道是不是正确的解释
THttpCli 的创建不能在 create 里,必须在 execute 里
 
www.source520.com 站长必进 2万源代码电子经典书狂下载
 
因为Create不是有创建的线程调用的,而是属于外面调用它的线程的,所以创建出来的THttpCli不运行在这个线程里面。
 
后退
顶部