ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Indy+Proxy=Отвал потока
  #1  
Старый 23.04.2010, 17:12
ange007
Новичок
Регистрация: 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;
 
Ответить с цитированием

  #2  
Старый 25.04.2010, 23:06
maestro-ant
Новичок
Регистрация: 08.01.2007
Сообщений: 25
Провел на форуме:
25858

Репутация: 5
По умолчанию

отладчиком нужно ловить. лучше б выложил ехе
 
Ответить с цитированием

  #3  
Старый 26.04.2010, 02:25
ange007
Новичок
Регистрация: 26.08.2009
Сообщений: 19
Провел на форуме:
977507

Репутация: 33
По умолчанию

Позже может выложу.
Потоки валятся не постоянно, а иногда.
В принципе от прокси зависит это всё.
Но всё-равно интересно.
 
Ответить с цитированием

  #4  
Старый 26.04.2010, 02:58
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме:
1819761

Репутация: 180
Отправить сообщение для M_script_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от ange007  
Позже может выложу.
Потоки валятся не постоянно, а иногда.
В принципе от прокси зависит это всё.
Но всё-равно интересно.
Поэтому инди и не использую. Говорят, что обновление инди помогает, но сам не пробовал.
 
Ответить с цитированием

  #5  
Старый 26.04.2010, 13:06
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме:
828081

Репутация: 84
По умолчанию

Что такое
Цитата:
ReleaseThread(Self);
?

У тебя я вообще что-то не вижу выполнение цикла в потоке. Т.е получается что поток один раз выполняется и завершается?

Я делаю так:
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..
 
Ответить с цитированием

  #6  
Старый 27.04.2010, 01:06
ange007
Новичок
Регистрация: 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)
 


Быстрый переход




ANTICHAT.XYZ