Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2009, 00:14   #1
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
Вопрос на строке Application.ProcessMessages виснет намертво

Друзья, помогайте.

Есть прога, парсит страницы на определенные ссылки и заносит их в БД.
После загрузки страницы у меня стоит пауза в 1 сек, чтобы webbrowser1 успел загрузить все у себя и можно было у него взять html страницы.

реализовано так:
Код:
...
тут код загрузки странцы и ожидание полной загрузки (...until webbrowser1.readystate=4)
...
repeat //пауза перед парсингом
  sleep(100);
  Application.ProcessMessages;
until i>=10;
bstatus.Caption:='Filling the memo';
memo1.Lines.Text:=Webbrowser1.OleObject.document.GetElementByID('searchContent').InnerHTML;
....
Проблема в следующем: мой парсер проходит несколько html страниц, эта пауза успешно везде срабатывает (т.е. задерживается на секунду перед заполнением memo1 без зависания формы).
Но на определенной странице на шаге Application.ProcessMessages; прога виснет намертво.
При этом try..except..end; ничего не дает. Останавливается весь цикл (я встраивал счетчик inc(i) с отображением i, на одном и том же значении виснет.

Другие запросы делаю парсеру, проходит все успешно. Парсит сотни страниц без вопросов. А при определенном запросе и именно на той странице - виснет.

Считать ли это глюком системы (а-ля F00FC7C8 в свое время) или можно еще какие-то проверки сделать? А то коряво как-то получается, глюк есть, а исправить не пойму как..

Последний раз редактировалось mosq; 23.09.2009 в 00:20.
mosq вне форума Ответить с цитированием
Старый 23.09.2009, 00:24   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

конфликт сообщений походу из-за пауз...

вот тут гляньте
может поможет:
http://www.delphiworld.narod.ru/base...pl_frames.html
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.09.2009, 00:41   #3
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
конфликт сообщений походу из-за пауз...
вот тут гляньте
может поможет:
http://www.delphiworld.narod.ru/base...pl_frames.html
Идет одно выполнение с одного нажатия кнопки.
Загрузки, паузы и считывания статуса браузера - все в одной процедуре.
Похоже на какое-то переполнение в чем-то. Но у меня все переменные обнуляются перед каждым циклом и не выходят за рамки.

ну во, пришлось поковыряться, выяснил причину: причина в некорректных символах, которые загружались в webbrowser со страницы.

решилось так

Код:
const badabc='‹›¿';
....
s:=Webbrowser1.OleObject.document.GetElementByID('searchContent').InnerHTML;
for i:=1 to length(badabc) do
  delete(s,pos(badabc[i],s),1);
Webbrowser1.OleObject.document.GetElementByID('searchContent').InnerHTML:=s;
Теперь Application.ProcessMessages; не зависает, все работает корректно.

PS: О том, как я выявлял эти кривые символы из 30кб текста можно слагать отдельные песни )

Последний раз редактировалось Stilet; 23.09.2009 в 08:26.
mosq вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое application.processMessages? TwiX Общие вопросы Delphi 4 29.07.2009 21:18
application.ProcessMessages; UROKSAN Общие вопросы Delphi 2 10.04.2008 13:32
Аналог Application.ProcessMessages() Alter Общие вопросы Delphi 10 10.02.2008 00:58
Application.ProcessMessages =LeonZone= Общие вопросы Delphi 11 27.01.2008 21:31
Application.ProcessMessages KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.08.2007 23:38