两个类之间互相引用的问题(50分)

  • 主题发起人 主题发起人 jobsxy
  • 开始时间 开始时间
J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了两个类A、B,其中A是个线程类,因B类的一个方法需要调用线程,所以我就把A的定义放到了B的前面,例子大致如下:
type
TA=Class(TThread)
Protected
procedure execute;override;
end;
type TB=Class(TOBJECT)
private
FCodeList: TStringList;
FNameList: TStringList;
ThreadProc: TA;
public
constructor Create(AOwner: TComponent)
override;
end;


调用B.ThreadProc执行一个线程,此线程我需要它往FCodeList与FNameList写数据,但
这就有一个问题,在A类是无法调用B.的内部成员,应该如何处理呢?
 
把属性public出来就可以了呀
TB=Class(TOBJECT)
private
FCodeList: TStringList;
FNameList: TStringList;
ThreadProc: TA;
public
property CodeList : TStringList Read FCodeList write FCodeList;
property NameList : TStringList Read FNameList write FNameList;
constructor Create(AOwner: TComponent)
override;
end;
 
我照此方法改写,但是
procedure TA.Execute;
begin
//仍然不行,打了点以后并没有CodeList这个东东啊
TB.CodeList.CommaText := 'werqw,sdg,asfd'

end;
 
你可以在定义线程时重载Create,把B的参数传过去
 

type TB=Class(TOBJECT)
private
FCodeList: TStringList;
FNameList: TStringList;

public
constructor Create(AOwner: TComponent)
override;
end;

type
TA=Class(TThread)
Protected
procedure execute;override;
end;
var
ThreadProc: TA;

类似这样定义就可以了,灵活处理嘛。
 
to zhoujg:不行吧,我得“实时”取得FCodeList的值,如果等线程结束再把值传给B,则线程的意义没了。
 
1.
type TB=Class(TOBJECT)
public
constructor Create(AOwner: TComponent)
override;//有些错误
TObject 中并没有
constructor Create(AOwner: TComponent)

只有参数相同的才能override
2.
procedure TA.Execute;
begin
//仍然不行,打了点以后并没有CodeList这个东东啊
TB.CodeList.CommaText := 'werqw,sdg,asfd'

//有点怪!!TB是类啊,怎么会有呢!
end

 
procedure TA.Execute;
begin
//仍然不行,打了点以后并没有CodeList这个东东啊
TB.CodeList.CommaText := 'werqw,sdg,asfd'

// 而且在这里如果用到了VCL,还要使用同步
end


你可以把TB的对象的引用传给TA的构造函数
TA=class(TThread)
...
public
constructor create(suspended:boolean;AOwner:TB)
end;
然后在
TA.execute 使用synchronize(一个过程)
在那个过程加上下面的代码
Aowner.CodeList.CommaText := 'werqw,sdg,asfd'
 
那是Create时传进去的,Delphi中传递类都是传址的,你访问它当然是及时的值了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部