![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Скажите пожалуйста, вот в такой конструкции:
Код:
var Objects : IXMLNode; // вся структура файла целиком ObjectsArr : array of IXMLNode; // массив (разделение всего файла на составляющие) ... begin ... FormMain.XMLDoc.FileName := LOKAL_DIR + 'XML\' + FileName; FormMain.XMLDoc.Active := true; Objects := FormMain.XMLDoc.DocumentElement; SetLength(ObjectsArr, Objects.ChildNodes.Count); for ObjNr := 0 to Objects.ChildNodes.Count - 1 do ObjectsArr[ObjNr] := Objects.ChildNodes[ObjNr]; Каждый элемент массива ObjectsArr является самостоятельным ресурсом, с точки зрения потока или этот элемент хранит лишь ссылку на объект XMLDoc, который будет закрывать к себе доступ для других потоков(второго третьего...) при обращении к нему одного (первого)? Задача у меня такая: каждый элемент массива - это большая структура (кусок основного XML файла), которую я хочу отдать на растерзание отдельному потоку. Как это сделать правильно? Дальше в цикле я просто создаю потоки, заполняя ими буффер менеджера потоков (максимум 10 штук потоков): Код:
while Length(ObjectsArr) > 0 do for ObjNr := 0 to 9 do if (ParsersArr[ObjNr] = nil) or (ParsersArr[ObjNr].Finished) then begin temp := Length(ObjectsArr) - 1; FormMain.Log.Lines.Add('[INFO] [' + DateTimeToStr(Now) + ']: Parsing Object Nr: ' + ObjectsArr[temp].ChildValues['T_Number']); ParsersArr[ObjNr] := TParser.Create(ObjectsArr[temp]); SetLength(ObjectsArr, (Length(ObjectsArr) - 1)); end; Передаю конкретный IXMLNode потоку в Private секцию: Код:
type TParser = class(TTHread) private fObject: IXMLNode; protected procedure Execute; override; public constructor Create(XMLNode: IXMLNode); end; constructor TParser.Create(XMLNode: IXMLNode); begin inherited Create(false); self.fObject := XMLNode; end; И дальше развлечения уже идут внутри метода Execute. Там просто обычная работа с IXMLNode Последний раз редактировалось Uniq!, 13.03.2015 в 19:25. |