ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

23.04.2010, 17:12
|
|
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме: 977507
Репутация:
33
|
|
Indy+Proxy=Отвал потока
Что-то сегодня всё спрашивают про потоки и всё с ними связанное.
Сегодня всемирный день Threads?
Но раз на то пошло задам и я вопрос.
Пытаюсь разобраться какого хрена иногда валятся потоки при юзании прокси.
То-есть просто при запросе поток падает и всё.
Пример:
Код:
procedure TVoteThread.Execute;
var text:string;
begin
{--//--}
FState := shReady;
Synchronize(Start);
FResult := 2;
{Создаём компоненты}
{}
FH := TidHTTP.Create;
FS := TIdIOHandlerStack.Create;
{--//--}
HTTPParms:=TStringList.Create;
StreamParms := TStringStream.Create;
{--//--}
FH.IOHandler := FS;
if FProxyTag=0 then FH.IOHandler := FS.MakeDefaultIOHandler(FH);
if (FProxyTag=1) or (FProxyTag=2) then
begin
SI := TIdSocksInfo.Create;
SSL := TidSSLioHandlerSocketOpenSSL.create;
SSL.SSLOptions.Method := sslvtlsv1;
SSL.Port := 443;
FH.IOHandler := SSL;
end;
FH.HandleRedirects := true;
FH.HTTPOptions := [];
FH.ReadTimeout := FTimeOut * 1000;
FH.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7';
FH.Request.Accept := 'text/html, */*';
FH.Request.Connection := 'Keep-Alive';
FH.Request.AcceptEncoding := 'identity';
if FProxyTag=0 then
begin
FH.ProxyParams.ProxyServer := FProxyHost;
if not (FProxyPort='') then FH.ProxyParams.ProxyPort := strtoint(FProxyPort);
if not (FProxyUserName='') then FH.ProxyParams.ProxyUsername := FProxyUserName;
if not (FProxyPassword='') then FH.ProxyParams.ProxyPassword := FProxyPassword;
end;
if (FProxyTag=1) or (FProxyTag=2) then
begin
SI.Authentication := sanoAuthentication;
SI.Host := FProxyHost;
if not (FProxyPort='') then SI.Port := strtoint(FProxyPort);
SI.Username := FProxyUserName;
SI.Password := FProxyPassword;
if FProxyTag=1 then SI.Version := svSocks4;
if FProxyTag=2 then SI.Version := svSocks5;
if not (FProxyUserName='') then SI.Authentication := saUsernamePassword;
SSL.Transparentproxy := SI;
end;
{Основное выполнение потока}
try
try
text:=FH.GET('http://');
except
FResult := 2;
end;
FState := shComplete;
Synchronize(Complete);
finally
ReleaseThread(Self);
end;
end;
|
|
|

25.04.2010, 23:06
|
|
Новичок
Регистрация: 08.01.2007
Сообщений: 25
Провел на форуме: 25858
Репутация:
5
|
|
отладчиком нужно ловить. лучше б выложил ехе
|
|
|

26.04.2010, 02:25
|
|
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме: 977507
Репутация:
33
|
|
Позже может выложу.
Потоки валятся не постоянно, а иногда.
В принципе от прокси зависит это всё.
Но всё-равно интересно.
|
|
|

26.04.2010, 02:58
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Сообщение от ange007
Позже может выложу.
Потоки валятся не постоянно, а иногда.
В принципе от прокси зависит это всё.
Но всё-равно интересно.
Поэтому инди и не использую. Говорят, что обновление инди помогает, но сам не пробовал.
|
|
|

26.04.2010, 13:06
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
Что такое
?
У тебя я вообще что-то не вижу выполнение цикла в потоке. Т.е получается что поток один раз выполняется и завершается?
Я делаю так:
PHP код:
procedure TMythread.Execute;
begin
InterLockedIncrement(ThreadsCount);//Увеличиваем счетчик запущенных потоков
try
while not Terminated do
begin
try
MyProcedure();//Выполняем в цикле процедуру, в которой и находится основной код потока
except end;
end;
finally
InterLockedDecrement(ThreadsCount);//Уменьшаем счетчик потоков
end;
end;
Последний раз редактировалось GhostOnline; 26.04.2010 в 13:29..
|
|
|

27.04.2010, 01:06
|
|
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме: 977507
Репутация:
33
|
|
Поэтому инди и не использую. Говорят, что обновление инди помогает, но сам не пробовал.
Нет времени перейти на что-то другое.
Нет времени изучать толком.
Обновления много когда не только не улучшают но и очень сильно ухудшают ситуацию...вот такая вот фигня получается.
У тебя я вообще что-то не вижу выполнение цикла в потоке. Т.е получается что поток один раз выполняется и завершается?
Да.
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
[C#] FAQ Многопточные приложения
|
Algol |
С/С++, C#, Delphi, .NET, Asm |
13 |
13.04.2010 16:08 |
|
Разработано новое системное решение: передача потока Ethernet по каналам E1/ STM
|
aka dexter |
Мировые новости |
0 |
31.12.2009 05:17 |
|
Установка Indy 10.5.6
|
НTL |
С/С++, C#, Delphi, .NET, Asm |
10 |
20.12.2009 09:15 |
|
Indy 10 - проблема
|
mailbrush |
С/С++, C#, Delphi, .NET, Asm |
9 |
25.07.2009 16:56 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|