Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Внизвложенная структура Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.067 c