Показать сообщение отдельно
  #12  
Старый 07.03.2015, 17:20
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

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] - массив, живущих потоков
Ответить с цитированием