TObjectList

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TObjectList

Сообщение sema_90 » 06.12.2013 20:12:46

TMemBlock(Obj).Size

при создании все правильно записывается (проверял при отладке), а при обращении из другого модуля он мне возвращает числа, которые я туда не записывал. В uses я сослался на тот модуль.

а выражение

Код: Выделить всё
var obj:pointer;
...
    floor(TMemBlock(Obj).Size/SizeBlock)


дает ноль.
sema_90
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.11.2013 13:50:31

Re: TObjectList

Сообщение SeZuka » 08.12.2013 07:56:47

Это вопрос для телепатов?
Модуль свой приведите или хотя бы TMemBlock
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: TObjectList

Сообщение sema_90 » 08.12.2013 16:10:11

Здесь работает все нормально

Код: Выделить всё
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;
sema_90
незнакомец
 
Сообщения: 6
Зарегистрирован: 10.11.2013 13:50:31


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 228

Рейтинг@Mail.ru