delphi 怎么实现建立recoder数据的动态list
接收到的record数据,想用类似TList的结构存储存储. 因为接收之后要处理 处理完要删除,新的数据又要不断的被存储进来,数据是不定长的,而且是这样处理的,新进的record数据放在最后面,要处理的放在最前面。
type
TXXX = record
xxx: integer;
xx: integer;
end;
PXXX = ^TXXX;
var
.....
p: PXXX;
begin
....
New(p);
p.xxx := 10;
p.xx := 20;
AList.Add(p);
end
Type
RecTest = record (packed)
ID :integer;
Name :string;
Descript:string;
end;
PRecList = ^RecTest
RecList arrary[0..100] of PRecList
1.
type
PA1 = ^TA1
TA1 = record
FA1, FA2: string;
end;
2.
type
PB2 = ^TB2
TB2 = record
FB1, FB2: string;
end;
List_USERTYPE := TList.Create;
//释放Tlist的存储的结构体
procedure TFrom_AdvSpreadGrid.FreeRecord(AList: TList);
var
i: Integer;
begin
for i := 0 to AList.Count - 1 do
begin
if Assigned(AList[i]) then
2. 如果定义的是基本类型如:integer,char等可以通用释放;3.如果定义的是短字符串类型,string[255]这样也可以释放
//Dispose(AList[i]);
// 1.定义的记录类型是复杂类型,包括string时,必须使用对应定义的记录来释放,例如如下:
Dispose(PUSE_TYPERec(AList[i]));
end;
end;
增加记录的代码:
1.
New(MyUSE_TYPERec);
MyUSE_TYPERec^.F_USE_TYPE_ID := '';
MyUSE_TYPERec^.F_USE_TYPE_Name := '';
List_USERTYPE.Add(MyUSE_TYPERec);
New(MyUSE_TYPERec);
MyUSE_TYPERec^.F_USE_TYPE_ID := 'U';
MyUSE_TYPERec^.F_USE_TYPE_Name := '正常编报';
List_USERTYPE.Add(MyUSE_TYPERec);
New(MyUSE_TYPERec);
MyUSE_TYPERec^.F_USE_TYPE_ID := 'S';
MyUSE_TYPERec^.F_USE_TYPE_Name := '虚拟汇总单位';
List_USERTYPE.Add(MyUSE_TYPERec);
2.
New(MyUSE_TYPERec);
MyUSE_TYPERec^.F_USE_TYPE_ID := 1;
MyUSE_TYPERec^.F_USE_TYPE_Name := 1;
List_USERTYPE.Add(MyUSE_TYPERec);
New(MyUSE_TYPERec);
MyUSE_TYPERec^.F_USE_TYPE_ID := 2;
MyUSE_TYPERec^.F_USE_TYPE_Name := 2;
List_USERTYPE.Add(MyUSE_TYPERec);
//
[解决办法]
有关记录和泛型,注意哟
http://bbs.csdn.net/topics/390397634
[解决办法]
不是很明白楼主的意思,是要建一个线程安全的队列吗?如果没有用到 dll 处理数据,下面就可以
Type
TRecTest = record (packed)
ID :integer;
Name :string;
Descript:string;
end;
RecList: TQueue<TRecTest>;
RecListLock: TRTLCriticalSection;
//创建时
begin
InitializeCriticalSection(RecListLock);
RecList:= TQueue<TRecTest>.Create;
end;
// 解析时
begin
RecList.Clear;
FreeAndNil(RecList);
DeleteCriticalSection(RecListLock);
end;
function PeekRec: TRecTest;
begin
FillChar(Result, SizeOf(TRecTest), #0);
Result.ID := -1; //返回值 -1 表示无效
EnterCriticalSection(RecListLock);
Result := RecList.Dequeue;
LeaveCriticalSection(RecListLock);
end;
procedure AppendRec(RecTest: TRecTest)
begin
EnterCriticalSection(RecListLock);
RecList.Enqueue(RecTest);
LeaveCriticalSection(RecListLock);
end;
[解决办法]
D2009 以后是有泛型的。
TList<Record>
很容易哦
http://www.cnblogs.com/del/category/213198.html