Вниз
Скачать: CL | DM;

вложенная структура   Найти похожие ветки 

 
GanibalLector ©   (2006-12-26 16:32) [0]

Преследую цель перадать в поток некоторую структуру. Причем одним из значений этой структуры является массив строк, размер которого постоянно меняется. Я лишь знаю, что он не превышает 25 тыс.строк.

Собственно,сделал так :

type
TLine = packed record
 hLine:String[$FF];
end;
PLineArray = ^TLineArray;
TLineArray= array[1..25000] of TLine;

TMyMode = packed record
 Count:Integer;
 Line:PLineArray;
end;
PMyMode =^TMyMode;

function Potok(Param:PMyMode):DWord;
 var I:Integer;
begin
 for I:=1 to Param.Count do
 begin
   //использую массив
   //PLineArray(Param.Line)[I].hLine;
 end;

 Dispose(Param.Line);
 Dispose(Param);
 Result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
 var ThreadID:DWord;
     Obj:PMyMode;
     I:Integer;
     Q:PLineArray;

 const Max_=150; // это значение меняется !!!
begin

 New(Q);
 for I:=1 to Max_ do
  Q^[I].hLine:="Test"+IntToStr(I);

 New(Obj);
 Obj^.Count:=Max_;
 Obj^.Line:=Q;
 CloseHandle(BeginThread(nil,0,@Potok,Obj,0,ThreadID));
end;



Все работает...утечек нет. Но, жутко не нравится мне мой подход.
Я выделяю память под TLineArray тогда как реально буду использовать лишь малую часть этого массива.

Подскажите, как поступить ???


 
Сергей М. ©   (2006-12-26 16:44) [1]


> выделяю память под TLineArray тогда как реально буду использовать
> лишь малую часть этого массива


Именно это тебе "жутко не нравится" ?

Если так, то используй дин.массивы или дин.списки - на то они и динамические, что хранят в каждый момент времени только то что в них реально требуется хранить


 
Sha ©   (2006-12-26 16:45) [2]

а что мешает передавать array of string?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.028 c
15-1169667723
ANTPro
2007-01-24 22:42
2007.02.18
boot.ini для WinXP


15-1169668968
Цукор5
2007-01-24 23:02
2007.02.18
Jafuna


15-1169617089
Александр Иванов
2007-01-24 08:38
2007.02.18
Как я сертификат пытался получить


6-1147537557
scolopax
2006-05-13 20:25
2007.02.18
ClientSocket1.Open;


4-1160485528
DVM
2006-10-10 17:05
2007.02.18
Почему при выполнении этого возрастает счетчик дискрипторов?




   Наверх