Здесь работает все нормально
Код: Выделить всё
procedure TFAppend.Button1Click(Sender: TObject);
begin
ListTask.Add(TMemBlock.Create(LEName.Text,StrToInt(LESize.text),
StrToInt(LEStart.text),StrToInt(LETime.text)));
ListUnOper.Add(TMemBlock.Create(LEName.Text,StrToInt(LESize.text),
StrToInt(LEStart.text),StrToInt(LETime.text)));
Close;
end;
а тут в полях TMemBlock числа не те
Код: Выделить всё
type
TMemBlock = class
Name:string;
Size:integer;
Start:integer;
Time:integer;
StartTime:integer;
StartBlock:integer;
constructor create(AName:string; ASize,AStart,ATime:integer);
function AsString:string;
end;
var ListTask,ListOper,ListEndOper,ListUnoper:TobjectList;
MemBlock:TMemBlock;
MemMap:TMemMap;
CountBlock,SizeBlock,MemSize:integer;
constructor TMemBlock.Create(AName:string; ASize,AStart,ATime:integer);
begin
Name:=AName;
Size:=ASize;
Start:=AStart;
Time:=ATime;
StartTime:=0;
StartBlock:=0;
end;
procedure Mem;
var obj:pointer;
i,j:integer;
f:boolean;
begin
if ListOper.Count<>0 then
for obj in ListOper do
begin
if TMemBlock(Obj).StartTime+TMemBlock(Obj).Size-1>=t then
begin
for i:=TMemBlock(Obj).StartBlock to TMemBlock(Obj).Size-1 do
MemMap[i]:=true;
ListEndOper.Insert(0,TMemBlock(Obj));
TMemBlock(Obj).free;
end;
end;
for obj in ListUnOper do
begin
if TMemBlock(Obj).Start>=t then
begin
for i:=0 to CountBlock-floor(TMemBlock(Obj).Size/SizeBlock)+1 do
begin
if MemMap[i] then
begin
f:=true;
for j:=i+1 to i+ceil(TMemBlock(Obj).Size/SizeBlock)-1 do
begin
if (j=CountBlock) or (not MemMap[j]) then
begin
f:=false;
break;
end;
end;
end;
if f then
begin
for j:=i to i+ceil(TMemBlock(Obj).Size/SizeBlock)-1 do
MemMap[j]:=false;
TMemBlock(Obj).StartBlock:=i;
TMemBlock(Obj).StartTime:=t;
ListOper.Insert(0,TMemBlock(obj));
TMemBlock(Obj).Free;
end;
end;
end;
end;
end;