Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XML и зависание главной формы


Страницы:   1 2 3

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.
 Я уже там не работаю :)))))


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо