Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.03.2010, 16:24
romingood romingood вне форума
Прохожий
 
Регистрация: 26.02.2010
Сообщения: 36
Репутация: 9
Радость Пара вопросов по существу

Всем привет!

Итак, вопрос первый.

Есть приложение.
Там кучка переменных (инт, стринги, несколько стринглистов), Webbrowser, IdThhp, пара стринггридов. Прога работает круглосуточно.
Страницы парсит.
И вот после 10 часов непрерывной работы прога начинает жрать около 250 Мб оперативки. больше не жрет, но это всё равно перебор.

Подскажите, может надо какие-то переменные уничтожать? или Webbrowser прибивать и заново открывать? А то у меня в проге тока Стринглисты CREATE тся и FREE (освобождаются).

Да, и к этой же теме - как вообще в процессе работы програмы прибить WEbbrowser и потом открыть его как чистенький новенький компонент на форме? а то как прибить - знаю, а как назад вернуть - нет.


И второй вопрос.

Webbrowser у меня половину времени работы программы грузит какую-либо страницу. А пока он ее грузит - интерфейс программы практически не отвечает, не сворачивается, не разворачивается... Может как-то можно просто понизить приоритет компонента на форме? Если нет и надо делать отдельный поток - то подскажите плз на примере, как мне пользоваться этим отдельным потоком, просто передавая ему нужный URL, и выставить ему средний приоритет, чтобы не грузил мне всю программу.

И последнее. Наверное не в тему вопроса, но все же.
Как просто и быстро проверить наличие инета?
буквально в одну строчку кода.
Ответить с цитированием
  #2  
Старый 17.03.2010, 21:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1.
*Оммм... получаю исходник телекинезом...*
Проблема в строчке 59!
2.
Периодический вызов Application.ProcessMessages?
3.
Пингуй гугл
Примеров пинга в инэте миллионы, пользуйся да хоть тем же гуглом
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 18.03.2010, 22:40
romingood romingood вне форума
Прохожий
 
Регистрация: 26.02.2010
Сообщения: 36
Репутация: 9
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
1.
*Оммм... получаю исходник телекинезом...*
Проблема в строчке 59!
2.
Периодический вызов Application.ProcessMessages?
3.
Пингуй гугл
Примеров пинга в инэте миллионы, пользуйся да хоть тем же гуглом

Да не, я в общем хотел узнать, может какие переменные или компоненты в принципе отжирают память, если их не уничтожать...

И еще.
Application.ProcessMessages я вызываю регулярно, но в эту тему еще вопрос.

Application.ProcessMessages
sleep(5000);
Application.ProcessMessages

(это мне просто надо дать браузеру отстояться)
Все эти 5 секунд моё приложение висит.
Хотя 5 сек должно было просто постоять и нихрена не делать.
Чё не так-то?

А насчет пинга - это ладно, вопрос не такой уж принципиальный.
Мне важнее про переменные и про sleep
Ответить с цитированием
  #4  
Старый 18.03.2010, 23:01
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

sleep(5000); в основном процессе - это действительно ничего не делать ( 5 сек ) даже не обрабатывать сообщения о нажатиях кнопок.
А Application.ProcessMessages - это как раз обработать все поступившие сообщения, в том числе и о нажатиях кнопок.
Ответить с цитированием
  #5  
Старый 19.03.2010, 18:54
romingood romingood вне форума
Прохожий
 
Регистрация: 26.02.2010
Сообщения: 36
Репутация: 9
По умолчанию

Цитата:
Сообщение от s0Creator
sleep(5000); в основном процессе - это действительно ничего не делать ( 5 сек ) даже не обрабатывать сообщения о нажатиях кнопок.
А Application.ProcessMessages - это как раз обработать все поступившие сообщения, в том числе и о нажатиях кнопок.

Здорово! Осталось только решить, как мне тогда приостановить на 5 секунд выполнение программы, при этом РЕАГИРУЯ на все нажатия кнопок?

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

Последний раз редактировалось romingood, 19.03.2010 в 18:57.
Ответить с цитированием
  #6  
Старый 19.03.2010, 19:19
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от romingood
Здорово! Осталось только решить, как мне тогда приостановить на 5 секунд выполнение программы, при этом РЕАГИРУЯ на все нажатия кнопок?

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

Ты тогда расшифруй
Цитата:
приостановить на 5 секунд выполнение программы, при этом РЕАГИРУЯ на все нажатия кнопок?
А то у меня ассоциация - "выключить компьютер но чтоб реагировал на все клавиши" - Чтобы реагировать, программа должна работать, а для приостановления конкретных задач используют дополнительные потоки ( TThread ) или сохранение текущего состояния выполнения задачи или ... .

По поводу webbrowser - использовать другие средства для парсинга страниц ( заодно не будет грузиться хлам в виде картинок, флешь анимации, и прочих сторонних от Гугла, Яндекса ит.д ).
Ответить с цитированием
  #7  
Старый 21.03.2010, 00:11
romingood romingood вне форума
Прохожий
 
Регистрация: 26.02.2010
Сообщения: 36
Репутация: 9
Хорошо

Ладно, я понял.

Но ведь мне необходимо использовать веб-браузер на странице.
Не только для парсинга, но и для нажатия Сабмит всяких Яваскрипленных кнопок и т.п. В общем без него никак.

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

Что делать-то? Задачка вроде несложная.
Или - как мне этот самый браузер в отдельный поток (tthread) выкинуть? чтобы передавать ему в поток URL для загрузки. И поставить ему приоритет ниже среднего.

Или - какие еще есть варианты использования браузера в программе, но чтоб он не вешал прогу?
Ответить с цитированием
  #8  
Старый 21.03.2010, 03:44
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от romingood
Application.ProcessMessages
sleep(5000);
Application.ProcessMessages

Используй лучше следующую функцию, вместо выше написаного кода.
Код:
procedure Delay(dwMilliseconds: Longint);
 var
   iStart, iStop: DWORD;
 begin
   iStart := GetTickCount;
   repeat
     iStop := GetTickCount;
     Application.ProcessMessages;
   until (iStop - iStart) >= DWORD(dwMilliseconds);
 end;
Ответить с цитированием
  #9  
Старый 30.03.2010, 00:21
Аватар для Vlad55
Vlad55 Vlad55 вне форума
Прохожий
 
Регистрация: 17.10.2009
Сообщения: 17
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

А зачем для парсинга вообзе WebBrowser использовать? Понятно, что там на страничке надо кнопки жать и т.д. и т.п., а чисто на POST- GET-запросах никак не обойтись? Если сайт 1 или даже фиг с ним 10, но они определены и с них парсится инфа, то почему бы не изучить их в том плане, какой запрос и куда отправляется, что приходит в ответ и потом просто заюзать тот же idHTTP? По-моему так будет и правильнее и прога не будет так "ужираться" ресурсами
__________________
Delphi в Internet - блог о программировании. Малоизвестные и редко обсуждаемые темы программирования на Delphi
Ответить с цитированием
  #10  
Старый 30.03.2010, 15:37
Аватар для iliasmalorum02
iliasmalorum02 iliasmalorum02 вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 29
Репутация: -31
По умолчанию

Цитата:
Сообщение от romingood
Всем привет!

Итак, вопрос первый.

Есть приложение.
Там кучка переменных (инт, стринги, несколько стринглистов), Webbrowser, IdThhp, пара стринггридов. Прога работает круглосуточно.
Страницы парсит.
И вот после 10 часов непрерывной работы прога начинает жрать около 250 Мб оперативки. больше не жрет, но это всё равно перебор.

Подскажите, может надо какие-то переменные уничтожать? или Webbrowser прибивать и заново открывать? А то у меня в проге тока Стринглисты CREATE тся и FREE (освобождаются).

Да, и к этой же теме - как вообще в процессе работы програмы прибить WEbbrowser и потом открыть его как чистенький новенький компонент на форме? а то как прибить - знаю, а как назад вернуть - нет.


И второй вопрос.

Webbrowser у меня половину времени работы программы грузит какую-либо страницу. А пока он ее грузит - интерфейс программы практически не отвечает, не сворачивается, не разворачивается... Может как-то можно просто понизить приоритет компонента на форме? Если нет и надо делать отдельный поток - то подскажите плз на примере, как мне пользоваться этим отдельным потоком, просто передавая ему нужный URL, и выставить ему средний приоритет, чтобы не грузил мне всю программу.

И последнее. Наверное не в тему вопроса, но все же.
Как просто и быстро проверить наличие инета?
буквально в одну строчку кода.
1 - Элементарно! Уничтожай переменные, когда они тебе не нужны. Периодически очищай компоненты.
2 - Перед кодом "долгих" процедур добавляй Application.ProcessMessages;
__________________
Делаю программы за очки репутации!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025