lmikle, огромное спасибо. Справился.
Собрал многопоточное приложение так, как это было необходимо.
Наткнулся на проблему: нужно ограничить количество потоков.
Прочитал, что нужен менеджер потоков. Массив ограниченной длины, в котором будут жить и умирать потоки.
Код получился таким. Чую, что можно проще. С радостью выслушал бы критику.
Код:
iObjs := XMLDoc.DocumentElement;
SetLength(XMLObjects, iObjs.ChildNodes.Count);
for ObjNr := 0 to iObjs.ChildNodes.Count - 1 do
XMLObjects[ObjNr] := iObjs.ChildNodes[ObjNr];
while Length(XMLObjects) <> 0 do
begin
for i := 0 to 4 do
begin
if (Parser[i] = nil) or (Parser[i].Finished) then
begin
Parser[i] := TObjectParser.Create
(iObjs.ChildNodes[Length(XMLObjects) - 1], i + 1);
SetLength(XMLObjects, Length(XMLObjects) - 1);
end;
end;
Application.ProcessMessages;
end;
XMLObjects[ObjNr] - массив задач, которые нужно выполнить *массив объектов
Parser[i] - массив, живущих потоков