多线程调用时报"abstract error"!

i404 2008-07-16 09:19:33
创建了一个线程,结果在线程create的时候,系统就报错"abstract error"了。代码如下:

procedure TFrm_E2BTest.btbtn_sendClick(Sender: TObject);
var
myurl:String;
postpara,XmlStr:WideString;
aThreadHttp:TThreadHttp;
begin
myurl:=赋值;
postpara:=赋值;
XmlStr:=赋值;
aThreadHttp:=TThreadHttp.create(myurl,postpara,XmlStr);
end;

type
TThreadHttp = class(TThread)

private
tURL:String;
tPostPara,tXmlStr:WideString;
protected
procedure Execute; override;
public
constructor create(aURL:String;aPostPara,aXmlStr:WideString);
end;

var
mydir:String;

implementation

uses Unit_E2BTest, HPCounter;
constructor TThreadHttp.create(aURL:String;aPostPara,aXmlStr:WideString);
begin
inherited Create(true); //执行到这里时报"abstract error"
FreeOnTerminate := true;
tURL := aURL;
tPostPara := aPostPara;
tXmlStr:=aXmlStr;
end;
procedure TThreadHttp.Execute;
{
略;
}
...全文
99 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
laxila 2008-09-30
  • 打赏
  • 举报
回复
楼主辛苦了
laxila 2008-09-30
  • 打赏
  • 举报
回复
最近正在研习中!!!
majiajun_no_13 2008-09-28
  • 打赏
  • 举报
回复
看贴是学习,顶贴是义务。呵呵
i404 2008-07-25
  • 打赏
  • 举报
回复
结帖了。谢谢大家。
oushengfen 2008-07-16
  • 打赏
  • 举报
回复
从结构上看,没看出什么问题.
i404 2008-07-16
  • 打赏
  • 举报
回复
我仔细检查了代码,没有发现在哪里定义了抽象方法啊。
除了excute部分,其他的代码都在上面了。
云海ldj 2008-07-16
  • 打赏
  • 举报
回复
可能是继承抽象方法并且没有实现该过程,才导致这个错误

TExe_ProThread = class(TThread)
private
OwnerForm: TAccForm;
FException: Exception;
ProSucc:Boolean;
ProSta:string;
procedure DoExe_Pro;
procedure DoHandleException;
procedure ThreadDone(Sender: TObject);
protected
procedure Execute; override;
procedure HandleException;
public
constructor Create(Owner: TAccForm;FLAG:String);
end;

constructor TExe_ProThread.Create(Owner: TAccForm;FLAG:String);
begin
OwnerForm:=Owner;
ProSta := FLAG;
inherited Create(True);
FreeOnTerminate := True;
Priority :=tpNormal;
end;
procedure TExe_ProThread.Execute;
begin
FException := nil;
ProSucc := False;
inherited;
if Terminated then Exit;
try
DoExe_Pro;
except
ProSucc := False;
HandleException;
end;
end;
procedure TExe_ProThread.DoExe_Pro;
begin
....
end;
procedure TExe_ProThread.DoHandleException;
begin
....
end;
procedure TExe_ProThread.HandleException;
begin
inherited;
.....
end;
.....
我就这样用的没有报错,并且线程中加了异常捕获.
hongqi162 2008-07-16
  • 打赏
  • 举报
回复
原因是你调用了抽象方法,但是在你上面的程序里看不出来,你上面的代码在我这里没有问题
JeffChung 2008-07-16
  • 打赏
  • 举报
回复
Execute里是不是写了inherited?

Execute是抽象方法,没有实现,如果在子类中写了inherited的话就出这样的错了
yangkunjie 2008-07-16
  • 打赏
  • 举报
回复
继承没有完成抽象方法,才导致这个错误
ching11 2008-07-16
  • 打赏
  • 举报
回复
inherited Create(false)试试
tobelost 2008-07-16
  • 打赏
  • 举报
回复
编译器没给出警告吗,如果你创建一个带抽象方法的类的实体

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧