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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 09:06   #1
Lion-Tiger
Пользователь
 
Регистрация: 25.01.2009
Сообщений: 43
По умолчанию Проблема с IdHttp

Моя программа переходит по страницам онлайн игры и собирает нужную информацию с помощью idhttp.get(url) и иногда программа лишает меня доступа к игре, то есть во время работы проги она виснет и после этого я иногда даже сутки не могу зайти в игру.
подскажите пожалуйста в чем может быть причина и как это исправить?
подозреваю, что это из-за того что нету задержки между запросами, возможно такое?
когда пытался вставить задержку с помошью таймера, вообще не работало, сразу подвисла программа и все
Код:

procedure TFMain.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
end;

procedure TFMain.wait;
begin
timer1.Enabled:=true;
repeat
application.ProcessMessages;
until timer1.Enabled=false;
end;
вставляю проседуру wait перед всеми запросами, а он все равно виснет, интервал таймера менял и 5000 ставил и 100 и 1, ничего не помогало.
Помимо этого у меня второй таймер с интервалом 1000
Код:

procedure TFMain.Timer2Timer(Sender: TObject);
begin
t:=t+0.00001;
time_label.Caption:=formatdatetime( 'hh:nn:ss ',t);
end;
это типо показывается игровое время, во время отладки прога скакала по
procedure TFMain.Timer2Timer(Sender: TObject); потом переходила на procedure TFMain.wait; а до срабатывания первого таймера не доходит =(

Пользуйтесь кнопкой "Правка"!

ок

Последний раз редактировалось Lion-Tiger; 25.05.2009 в 14:34. Причина: Объединение постов
Lion-Tiger вне форума Ответить с цитированием
Старый 27.05.2009, 21:47   #2
Alex_C
Пользователь
 
Регистрация: 11.12.2006
Сообщений: 10
По умолчанию

Проблема известная - глюк компонентов Инди. Решение - отказаться от них и написать свою ф-цию HTTP.Get, тем более, что примеров в инете более чем достаточно. При этом будешь всесьма приятно удивлен, на сколько все более стабильно и быстрее будет работать
Alex_C вне форума Ответить с цитированием
Старый 27.05.2009, 22:18   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Alex_C, очень интересно: и что же это за такая
Цитата:
Проблема известная - глюк компонентов Инди
?
Lion-Tiger, по тем кускам кода, который показали вряд ли можно что- то понять.
1. Обрабатывайте события onworkbegin,onwork.onworkend, написав в них хотя бы application.ProcessMessages;
2. Добавьте на форму компонент IdAntiFreez (вкладка Indy/Misc).

Данные задержки обсуловлены использованием синхронных сокетов ( блокирующего режима). Т.е. пока не получен ответ на запрос, работа дальше в программе не передастся. Описанные выше методы позволят это сгладить.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 28.05.2009, 01:03   #4
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
1. Обрабатывайте события onworkbegin,onwork.onworkend, написав в них хотя бы application.ProcessMessages;
2. Добавьте на форму компонент IdAntiFreez (вкладка Indy/Misc).
Ещё лучше убрать idHTTP в отдельный поток
Виталий Серов вне форума Ответить с цитированием
Старый 28.05.2009, 08:11   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Сообщение от Виталий Серов Посмотреть сообщение
Ещё лучше убрать idHTTP в отдельный поток
На самом деле это не сильно поможет, если сделать указанные 2 пункта, так как события onworkXXX являются синхронизационными событиями для внутренних потоков Indy. А AntiFreez как раз поможет в периоды простоя опрашивать сообщения ОС.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 01.06.2009, 13:04   #6
Lion-Tiger
Пользователь
 
Регистрация: 25.01.2009
Сообщений: 43
По умолчанию

проблема решилась))))
как всегда сделал глупую ошибку, когда-то удалил таймер и поставил новый и у нового таймера не было этого события и соответственно он не реагировал, всем спасибо
Lion-Tiger вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idhttp - get запрос seoanalyzer Работа с сетью в Delphi 5 29.04.2012 17:33
Проблема с авторизацией через IdHttp ]Wowan[ Работа с сетью в Delphi 13 20.01.2011 02:42
Проблема с idhttp Joe_Tribbiani Работа с сетью в Delphi 5 21.04.2009 18:45
idHTTP DeDoK Общие вопросы Delphi 5 05.06.2008 22:45
Проблема добавления в мемо из IdHTTP Kukkk Работа с сетью в Delphi 6 11.11.2007 13:48