Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
ВнизXML и зависание главной формы Найти похожие ветки
← →
Student :) © (2008-03-03 13:23) [0]Привет всем знатокам!!
вопрос есть некий XML документ на сервере Я ЕГО загружаю и парсю но при этом процесе
главная форма зависает ! как мне ето обойти ? без потоков делаю так.procedure TForm1.Button1Click(Sender: TObject);
var
//CityID: string;
CoDoc: CoDOMDocument;
XMLD: DOMDocument;
r: IXMLDOMElement;
FNode: IXMLDOMNode;
i,y: integer;
begin
XMLD:=CoDoc.Create ;
XMLD.async:=false;
URL:=ComboBox1.Text;
XMLD.load(URL);
////////////////////////// здесь чтото не так
while not XMLD.load(URL) do
Application.ProcessMessages;
////////////////////////////
memo1.Clear;
listbox1.Clear;
r:=XMLD.documentElement;
FNode:= r.SelectSingleNode("//rss");
if FNode.attributes.getNamedItem("version").text<>"2.0"
then
begin
Memo1.Lines.Add("error no 2.0");
Exit;
end;
← →
Palladin © (2008-03-03 13:25) [1]
> ////////////////////////// здесь чтото не так while not
> XMLD.load(URL) do Application.ProcessMessages; ////////////////////////////
ага :) что то не так...
← →
Student :) © (2008-03-03 13:32) [2]Уважаемые а как переделать? и прогресс бар бы привязать
← →
Student :) © (2008-03-03 13:45) [3]к сожелению не кто не знает :(
← →
Reindeer Moss Eater © (2008-03-03 13:49) [4]два раза лоад для надежности?
:)
← →
Сергей М. © (2008-03-03 13:50) [5]
> Я ЕГО загружаю и парсю
Судя по
> while not XMLD.load
делать это ты собираешься до опупения, даже если док-т, к примеру, содержит какие-то ошибки и не может быть загружен.
← →
Student :) © (2008-03-03 14:06) [6]а как правильно?
← →
Student :) © (2008-03-03 14:14) [7]может так
XMLD.load(URL);
for I:=0 to 20 do
begin
Application.ProcessMessages;
end;
← →
Kolan © (2008-03-03 14:17) [8]Я что то не понимаю…
Если ты хочешь прогресс бар того, как загружает метод load, то и вставлять его надо внутрь его.
← →
Student :) © (2008-03-03 15:12) [9]ну как помогите горю!! сесия!
← →
Игорь Шевченко © (2008-03-03 15:14) [10]
> сесия!
У всех жена ушла (с)
← →
Reindeer Moss Eater © (2008-03-03 15:19) [11]ну как помогите горю!! сесия!
неправильно. правильно :
ну ка помогите горю!! сесия!
← →
clickmaker © (2008-03-03 15:20) [12]
> for I:=0 to 20 do
> begin
> Application.ProcessMessages;
> end;
20 маловато
← →
Student :) © (2008-03-03 15:21) [13]а поправде как вставить Application.ProcessMessages;
← →
DiamondShark © (2008-03-03 15:26) [14]
> Student :) © (03.03.08 15:21) [13]
> а поправде как вставить Application.ProcessMessages;
Выделить мышкой, нажать Ctrl C, перейти в текстовый редактор, нажать Ctrl V.
Как тебе что-то объяснить, если ты не только над кодом не думаешь, но и по-русски с трудом лопочешь.
ты над строчкой
> XMLD.async:=false;
помедитировал, или содрал не глядя?
← →
Сергей М. © (2008-03-03 15:27) [15]Студент, ты вообще осознаешь, что нельзя наперед знать кол-во итераций, которые потребуются парсеру при разборе заранее неизвестного ему содержимого документа ?
А ведь прогресс-бар подразумевает известное число итераций !
← →
oxffff © (2008-03-03 15:40) [16]
> А ведь прогресс-бар подразумевает известное число итераций
> !
прогресс-бар ничего не подразумевает.
>как мне ето обойти ?
Парсь в отдельном потоке.
← →
Сергей М. © (2008-03-03 15:45) [17]Кстати, заглянув в реестр, можно обнаружить, что объект Msxml2.DOMDocument.4.0 поддерживает ThreadingModel = Both.
Это означает, что можно смело и без дополнительных ухищрений вызвать XMLD.load() в дополнительном потоке, и, пока тот пыхтит с загрузкой и парсингом, в основном потоке занять юзера чем-либо увлекательным: хоть анимашку включить-показать ему хоть липовым прогресс-баром поелозить туда-сюда. А по окончанию загрузки и парсинга в том же основном потоке продолжить работу с XMLD.
← →
Сергей М. © (2008-03-03 15:47) [18]
> прогресс-бар ничего не подразумевает
да ты что ?!
И ни Min, ни Max, ни Step, ни Position ему не требуется указывать ?)
← →
oxffff © (2008-03-03 15:54) [19]
> Сергей М. © (03.03.08 15:47) [18]
>
> > прогресс-бар ничего не подразумевает
>
>
> да ты что ?!
>
> И ни Min, ни Max, ни Step, ни Position ему не требуется
> указывать ?)
Во первых в прогресс бар в общем случае есть только процентное соотношение заливки. И все.
Все остальное дело библиотек Wrapperoв. (например VCL).
И во вторых пакажите связь между
Min, Max, Step, Position и числом итераций. :)
← →
Palladin © (2008-03-03 15:56) [20]
> oxffff © (03.03.08 15:54) [19]
> И во вторых пакажите связь между Min, Max, Step, Position
> и числом итераций. :)
прямопропорциональная...
← →
Сергей М. © (2008-03-03 16:03) [21]
> прогресс бар в общем случае есть только процентное соотношение
> заливки
Не возражаю)
> пакажите связь между
> Min, Max, Step, Position и числом итераций
Встречное предложение - показать, как заранее не зная максимального число итераций парсера показать нелиповый прогресс-бар, отражающий в том самом процентном соотношении отношение максимального числа итераций парсера к номеру текущей итерации)
← →
oxffff © (2008-03-03 16:06) [22]
> прямопропорциональная...
Не угадал. :)
Почему вы утверждаете, что число итераций вычисляется заранее?
....
Bar.position:=Trunc(value) ?
......
Что мешает изменять шкалу в ран-time, вы что не видели окно копирования в Windows где время изменяется?
← →
oxffff © (2008-03-03 16:09) [23]
> Сергей М. © (03.03.08 16:03) [21]
Поймите что число итераций не обязательно должно быть известно, если известно что значение возрастает на следующей итерации.
While value<100 do
begin
nextvalue(value);
Bar.position:=Trunc(value);
end;
← →
Palladin © (2008-03-03 16:10) [24]
> oxffff © (03.03.08 16:06) [22]
ничего подобного... идеологически это уже не есть поведение progressbar, это есть поведение "я не повисло, я чего то делаю, но когда кончится не знаю"...
← →
trubin © (2008-03-03 16:15) [25]
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
Раз пришлось так делать, начальство хотело видеть непременно прогресс бар. Правда он временами дергался туда сюда :)). Но начальник был доволен улыбаясь говорил "Ведь можешь если премию хочешь" :))
P.S.
Я уже там не работаю :)))))
← →
oxffff © (2008-03-03 16:17) [26]
> Встречное предложение - показать, как заранее не зная максимального
> число итераций парсера показать нелиповый прогресс-бар,
> отражающий в том самом процентном соотношении отношение
> максимального числа итераций парсера к номеру текущей итерации)
см. [23].
А теперь подумайте сами как реализовать функцию nextvalue(value), которая будет при получении списка под-нод корректировать следующее значение в зависимости от их числа.
Подсказок от меня не будет.
← →
Сергей М. © (2008-03-03 16:20) [27]
> oxffff © (03.03.08 16:17) [26]
>
>
> см. [23].
>
см. [24]
← →
oxffff © (2008-03-03 16:26) [28]
> Сергей М. © (03.03.08 16:20) [27]
Смотрим ваше начальное высказывание
>А ведь прогресс-бар подразумевает известное число итераций !
У вас видимо так и есть. И это неплохо. Просто можно и по другому.
> Palladin © (03.03.08 16:10) [24]
>
> > oxffff © (03.03.08 16:06) [22]
>
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
К своим словам незабывай добавлять IMHO. :)
Где этот закон (Том, Глава, страница) в студию? :))
← →
oxffff © (2008-03-03 16:29) [29]
> Palladin © (03.03.08 16:10) [24]
>
> > oxffff © (03.03.08 16:06) [22]
>
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
Вычисляешь значение прироста на уровне в зависимости от числа нод уровня. Заходишь на подуровень.
Вычисляешь значение прироста на подуровне в зависимости от числа нод подуровня с учетом прироста верхнего уровня и т.д.
Если дерево сбалансировано,то будет все достаточно гладко.
← →
oxffff © (2008-03-03 16:39) [30]
> oxffff © (03.03.08 16:29) [29]
Прирост делаешь в Leaf nodes.
← →
Сергей М. © (2008-03-03 16:41) [31]
> можно и по другому
Можно и по-другому.
Но, по условию, XMLD.async:=false, никакие события парсера (если они имеются, это надо посмотреть) не используются, поэтому контролировать промежуточные результаты работы парсера до окончания этой работы в этой ситуации вряд ли представляется возможным. Если иначе - возьми да обозначь ключевые моменты автору, а мне оно нафих не надо за отсутствием интереса.
← →
oxffff © (2008-03-03 16:48) [32]
> а мне оно нафих не надо за отсутствием интереса.
Солидарен. :)
А мне оно тоже не нужно. :)
Я так в перерывах от ABAP захожу на любимый форум Delphimaster.
И отдыхаю от ABAPa. :)
← →
Student :) © (2008-03-03 16:55) [33]а как потоки создать? покажите примерчик
← →
Ник (2008-03-03 16:56) [34]C oxffff © (03.03.08 16:17) [26] по
oxffff © (03.03.08 16:48) [32] можно было бы и чате постебаться.
← →
oxffff © (2008-03-03 16:58) [35]
> Ник (03.03.08 16:56) [34]
Начни с себя. :)
← →
Palladin © (2008-03-03 17:06) [36]
> oxffff © (03.03.08 16:29) [29]
как корректно приращивать максимальное значение, что бы процентное значение позиции не лезло назад это и ежу понятно, вот только местами оно может в такие дебри завести, что лучше фигней не страдать, а удовлетвориться империческими данными. которые оцениваются перед (!) началом выполнения задачи. как и поступает знаменитое окно копирование в windows.
← →
Palladin © (2008-03-03 17:08) [37]фу мля... :))) эмпирическими
← →
Сергей М. © (2008-03-03 17:13) [38]Из любопытства посмотрел на события объекта DOMDocument.
Похоже что для прогресс-индикации можно прикрутить обработку события OnDataAvailable.
← →
oxffff © (2008-03-03 17:14) [39]
> Palladin © (03.03.08 17:06) [36]
Это не фигня.
Это работающий вариант.
Который корректно отражает вклад каждого конечного (leaf) узла в процесс, каждый из которых проранжирован.
А оценить данные на этапе, так как делает Windows уходя в ступор, в ряде случаев неприемлемо. А здесь Run Time подстройка прироста в зависимости от уровня вложенности.
← →
Palladin © (2008-03-03 17:17) [40]
> oxffff © (03.03.08 17:14) [39]
я"ж не казал, что у тебя фигня, я казал, что иногда лучше не стоит да и не отвергаю безразмерность прогресса... сам так делаю... просто пример ты привел с копированием неудачный :)
да и пользователи ругаются... умники блин...
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.045 c