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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2014, 23:32   #31
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Еще бывает проблема, когда поток останавливается сам по себе. То есть он работает, работает, а потом внезапно исчезает. Например работает приложение в 5 потоков, через некоторое время, потоков уже 3. При этом свое задание они не выполнили. они просто остановились и все.

В общем узнал, что проблема возникает где то тут:

Код:
while not Terminated do
begin
	try
		IdHTTP2.CookieManager.Free;
		IdHTTP2.Post(site, Data);
		IdHTTP2.Disconnect;
		sleep(TimeOut);

		html:=IdHTTP2.Get(site);
		IdHTTP2.Disconnect;
		sleep(TimeOut);

		if (Pos('Главная',html) <> 0) then Break;
	except

	end;
end;
Что здесь я сделал криво?
bilibian вне форума Ответить с цитированием
Старый 23.02.2014, 23:34   #32
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что здесь я сделал криво?
Disconnect. sleep.
Я бы это не писал.
IdHTTP2 кому принадлежит? Потоку? Или это компонент, брошенный на форму?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.02.2014, 23:38   #33
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
IdHTTP2 кому принадлежит? Потоку? Или это компонент, брошенный на форму?

Потоку принадлежит.

Доп параметры:
Код:
idHTTP2:=TIdHTTP.Create(nil);
idHTTP2.HandleRedirects:=True;
idHTTP2.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201';
idHTTP2.ReadTimeout:=20000;
IdHTTP2.ProxyParams.ProxyServer:=server;
IdHTTP2.ProxyParams.ProxyPort:=StrToInt(port);
bilibian вне форума Ответить с цитированием
Старый 24.02.2014, 00:14   #34
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Disconnect. sleep.
Я бы это не писал.
Убрал и в исключение получаю ошибку: Socket Error # 10054
bilibian вне форума Ответить с цитированием
Старый 24.02.2014, 07:15   #35
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Код:
Убрал и в исключение получаю ошибку: Socket Error # 10054
Кто у тебя передаёт значение в TimeOut? Кто его вызывает? Короче bilibian давай что бы с бубном не танцева, и в телепатов не играть, выкладывай полный код программы. Что бы тебе уже точно сказали где и что ты сделал криво
bulldog5293 вне форума Ответить с цитированием
Старый 24.02.2014, 09:22   #36
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от bulldog5293 Посмотреть сообщение
Кто у тебя передаёт значение в TimeOut? Кто его вызывает?
Значение в TimeOut передается из edit с формы.

Код:
ThreadArray[i]:=Thr.Create(TimeOut);
ThreadArray[i].FreeOnTerminate:=False;
ThreadArray[i].OnTerminate := ENDTerminated;
ThreadArray[i].Resume;
ThreadArray[i].Priority:=tpNormal;
Далее попадаем в конструктор и присваеваем глобальной переменной TimeOut, принадлежащей потоку, значение с формы.

Код:
constructor Thr.Create(TTimeOut:Integer);
begin
  inherited Create(True);
  TimeOut:=TTimeOut;
end;
Далее используем эту переменную в потоке.

Кстати ошибку Socket Error # 10054 выдает один из потоков, а не все. И при завершении потоков по кнопке, поток который выдает эту ошибку не риагирует на остановку. Есть подозрение, что поток не пропадает сам по себе, а просто в цикле получает эту ошибку, соответственно работу он свою выполнять не может. Просто когда задаешь disconnect и sleep эта ошибка не попадает в исключения, по не известным причинам, и ее не получалось отследить.

Прочитал на одном из форумов, что эта ошибка означает потерю соединения с сайтом, но когда соединение восстанавливается idhttp все равно продолжает ее возвращать.

Последний раз редактировалось bilibian; 24.02.2014 в 09:28.
bilibian вне форума Ответить с цитированием
Старый 24.02.2014, 10:26   #37
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эта ошибка говорит что связь разорвана. Обычно либо брандмауер мешает, либо сам связной разрывает связь по каким-то причинам.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2014, 10:51   #38
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Эта ошибка говорит что связь разорвана. Обычно либо брандмауер мешает, либо сам связной разрывает связь по каким-то причинам.
Прописал в исключении
Код:
IdHTTP2.Socket.Close;
ошибка появляется один раз, попадает в исключение где закрывается сокет, далее происходит реконнект к сайту и поток продолжает свою работу без ошибок

Последний раз редактировалось bilibian; 24.02.2014 в 11:00.
bilibian вне форума Ответить с цитированием
Старый 24.02.2014, 19:21   #39
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
Есть подозрение, что поток не пропадает сам по себе, а просто в цикле получает эту ошибку, соответственно работу он свою выполнять не может.
А чем ты вообще опридиляеш что он не пропал?
Цитата:
Просто когда задаешь disconnect и sleep эта ошибка не попадает в исключения, по не известным причинам, и ее не получалось отследить.
Насчёт disconnect не скажу, а вот про sleep этому место может быть, у самого раньше таже ситлуация была, что сайты ошибками валили без него, т.к. запросы валишь постоянно и скрипты сайта или ещё что ни будь понимает что это бот программа, а не человек. Но повторюсь нужен полный код, а не огрызки, может у тебя через два-три хода программы вообще другие ошипки повалят
bulldog5293 вне форума Ответить с цитированием
Старый 24.02.2014, 20:26   #40
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

bulldog5293, сегодня несколько часов тестировал, проблем не наблюдал.

Несколько дней назад, еще до исправления ошибок, ставил работать прогу на длительное время, примерно на сутки, в итоге получил ошибку out of memory.
bilibian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нескольких потоков iKarma Общие вопросы Delphi 9 20.10.2011 18:11
Запуск нескольких потоков bulldog5293 Общие вопросы Delphi 3 11.11.2010 18:24
Как реализовать запуск и контроль нескольких однотипных потоков. Son Общие вопросы Delphi 5 29.04.2010 08:40
Работа с файлом из нескольких потоков boris-blade Общие вопросы .NET 2 02.04.2010 17:21
Запуск потоков в цикле VALERO Общие вопросы Delphi 11 01.03.2009 14:57