![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вложенная структура [D7, Win95/98, WinXP]
GanibalLector © (2006-12-26 16:32:00)Преследую цель перадать в поток некоторую структуру. Причем одним из значений этой структуры является массив строк, размер которого постоянно меняется. Я лишь знаю, что он не превышает 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 тогда как реально буду использовать лишь малую часть этого массива.
Подскажите, как поступить ???
Sha (2006-12-26 16:45:00) [1]а что мешает передавать array of string?
Сергей М. (2006-12-26 16:44:00) [2]
> выделяю память под TLineArray тогда как реально буду использовать
> лишь малую часть этого массива
Именно этотебе "жутко не нравится" ?
Если так, то используй дин.массивы или дин.списки - на то они и динамические, что хранят в каждый момент времени только то что в них реально требуется хранить