16,749
社区成员
发帖
与我相关
我的任务
分享
{
4个类
TCCC包含一堆TBBB,TBBB又包含一堆TAAA
TMythread 也包含一堆TBBB,并且这一堆TBBB是 TCCC里面TBBB列表的一个子集,(相同的指针都指向同一个对象);
每个线程TMythread 操作的TBBB都不相同,
}
type
TAAA = (TPersistent)
public
procedure cal_andWritetoDataBase(); //内部计算并写入数据库
end;
TBBB = (TPersistent)
private
FAAAs:TList;
public
procedure AddAAA(Created_TAAAObject:TAAA); //加入 已经创建好的 TAAA对象
procedure Clear; //清除FAAA列表
function count:integer;
property AAAs[iIndex:integer]:TAAA read GetAAA write SetAAA;
end;
TCCC = (TPersistent)
private
FBBBs:TList;
public
procedure AddBBB(newValue:TBBB);//加入 已经创建好的 TBBB对象
procedure Clear;//清除FBBB列表
function count:integer;//列表大小;
property BBBs[iIndex:integer]:TBBB read GetBBB write SetBBB;
end;
TMyThread = class(TThread)
private
FBBBs:TList;
public
procedure AddBBB(newValue:TBBB);//加入 已经创建好的 TBBB对象
procedure Clear;//清除FBBB列表
function count:integer;//列表大小;
protected
procedure Execute; override;
end;
//TCCC 含有TBBB的一个列表,只在线程运行前和运行后操作TBBB,
//TCCC运行和操作都在在主线程,TBBB,TAAA创建和销毁都在主线程
//TMyThread 含有TBBB的一个列表,这个列表是TCCC列表的一个子集,在线程运行中进行操作
//主线程
var
CCC:TCCC;
mythread:array [0..5]of TMyThread ;
procedure initClass()
var
AAA:TAAA;
BBB:TBBB;
i,j:integer;
begin
// CCC已创建
for i:=0 to 10 do
begin
BBB:=TBBB.create;
for i:=0 to 50 do
begin
AAA:=TAAA.create;
BBB.AddAAA(AAA) ;
end;
CCC.AddBBB(BBB);
end;
....
for i:=0 to CCC.count do
begin
mythread[i mod 5].AddBBB(CCC.BBB[i]);
end;
for i:=0 to 5 do
begin
mythread[i].Resume;
end;
end;
procedure TMyThread.Execute;
begin
for i:=0 to count do
begin
for j:=0 to TBBB(FBBBs.Items[i]).count do
TBBB(FBBBs.Items[i]).AAAs[j].cal_andWritetoDataBase(); //内部计算并写入数据库
end;
end;