![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XML и зависание главной формы
Student :) © (2008-03-03 13:23:00)Привет всем знатокам!!
вопрос есть некий 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;
Сергей М. (2008-03-03 20:27:00) [1]
> Student :) © (03.03.08 19:20) [43]
> дайте
Давалка сломалась.
Шевели репой головы, тебе все уже разжевали)
Student :) (2008-03-03 19:20:00) [2]что то не получаеться дайте сылу на примеры с исходниками
Сергей М. (2008-03-03 17:34:00) [3]Собссно простейшее решение таково:
1. Старт загрузки документа в асинхронном режиме
2. Обработка события OnReadyStateChange : у документа при его загрузке и обработке всего 4 состояния, каждое состояние можно рассматривать как итерацию, прикрутить к этому прогресс-бар - плевое дело, причем безо всяких выкрутасов.
Дерзай)
Сергей М. (2008-03-03 17:21:00) [4]Студент, ты гда там ?)
Пляши отсюда
http://www.topxml.com/xml_dom/ondataavailable.asp
Авось и без потоков обойдется)
А то ведь провалишь сессию, а нам отвечать)
Palladin (2008-03-03 17:17:00) [5]
> oxffff © (03.03.08 17:14) [39]
я'ж не казал, что у тебя фигня, я казал, что иногда лучше не стоит да и не отвергаю безразмерность прогресса... сам так делаю... просто пример ты привел с копированием неудачный :)
да и пользователи ругаются... умники блин...
oxffff (2008-03-03 17:14:00) [6]
> Palladin © (03.03.08 17:06) [36]
Это не фигня.
Это работающий вариант.
Который корректно отражает вклад каждого конечного (leaf) узла в процесс, каждый из которых проранжирован.
А оценить данные на этапе, так как делает Windows уходя в ступор, в ряде случаев неприемлемо. А здесь Run Time подстройка прироста в зависимости от уровня вложенности.
Сергей М. (2008-03-03 17:13:00) [7]Из любопытства посмотрел на события объекта DOMDocument.
Похоже что для прогресс-индикации можно прикрутить обработку события OnDataAvailable.
Palladin (2008-03-03 17:08:00) [8]фу мля... :))) эмпирическими
Palladin (2008-03-03 17:06:00) [9]
> oxffff © (03.03.08 16:29) [29]
как корректно приращивать максимальное значение, что бы процентное значение позиции не лезло назад это и ежу понятно, вот только местами оно может в такие дебри завести, что лучше фигней не страдать, а удовлетвориться империческими данными. которые оцениваются перед (!) началом выполнения задачи. как и поступает знаменитое окно копирование в windows.
oxffff (2008-03-03 16:58:00) [10]
> Ник (03.03.08 16:56) [34]
Начни с себя. :)
Ник (2008-03-03 16:56:00) [11]C oxffff © (03.03.08 16:17) [26] по
oxffff © (03.03.08 16:48) [32] можно было бы и чате постебаться.
Student :) (2008-03-03 16:55:00) [12]а как потоки создать? покажите примерчик
oxffff (2008-03-03 16:48:00) [13]
> а мне оно нафих не надо за отсутствием интереса.
Солидарен. :)
А мне оно тоже не нужно. :)
Я так в перерывах от ABAP захожу на любимый форум Delphimaster.
И отдыхаю от ABAPa. :)
Сергей М. (2008-03-03 16:41:00) [14]
> можно и по другому
Можно и по-другому.
Но, по условию, XMLD.async:=false, никакие события парсера (если они имеются, это надо посмотреть) не используются, поэтому контролировать промежуточные результаты работы парсера до окончания этой работы в этой ситуации вряд ли представляется возможным. Если иначе - возьми да обозначь ключевые моменты автору, а мне оно нафих не надо за отсутствием интереса.
oxffff (2008-03-03 16:39:00) [15]
> oxffff © (03.03.08 16:29) [29]
Прирост делаешь в Leaf nodes.
oxffff (2008-03-03 16:29:00) [16]
> Palladin © (03.03.08 16:10) [24]
>
> > oxffff © (03.03.08 16:06) [22]
>
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
Вычисляешь значение прироста на уровне в зависимости от числа нод уровня. Заходишь на подуровень.
Вычисляешь значение прироста на подуровне в зависимости от числа нод подуровня с учетом прироста верхнего уровня и т.д.
Если дерево сбалансировано,то будет все достаточно гладко.
oxffff (2008-03-03 16:26:00) [17]
> Сергей М. © (03.03.08 16:20) [27]
Смотрим ваше начальное высказывание
>А ведь прогресс-бар подразумевает известное число итераций !
У вас видимо так и есть. И это неплохо. Просто можно и по другому.
> Palladin © (03.03.08 16:10) [24]
>
> > oxffff © (03.03.08 16:06) [22]
>
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
К своим словам незабывай добавлять IMHO. :)
Где этот закон (Том, Глава, страница) в студию? :))
Сергей М. (2008-03-03 16:20:00) [18]
> oxffff © (03.03.08 16:17) [26]
>
>
> см. [23].
>
см. [24]
oxffff (2008-03-03 16:17:00) [19]
> Встречное предложение - показать, как заранее не зная максимального
> число итераций парсера показать нелиповый прогресс-бар,
> отражающий в том самом процентном соотношении отношение
> максимального числа итераций парсера к номеру текущей итерации)
см. [23].
А теперь подумайте сами как реализовать функцию nextvalue(value), которая будет при получении списка под-нод корректировать следующее значение в зависимости от их числа.
Подсказок от меня не будет.
trubin (2008-03-03 16:15:00) [20]
> ничего подобного... идеологически это уже не есть поведение
> progressbar, это есть поведение "я не повисло, я чего то
> делаю, но когда кончится не знаю"...
Раз пришлось так делать, начальство хотело видеть непременно прогресс бар. Правда он временами дергался туда сюда :)). Но начальник был доволен улыбаясь говорил "Ведь можешь если премию хочешь" :))
P.S.
Я уже там не работаю :)))))