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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2014, 17:04   #21
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Да? Ну смотри

Код:
HTTP.HTTPMethod('GET', proxy.Strings[Num]); // попытка загрузки, которая может провалиться
try
html.LoadFromStream(http.Document);// и какой толк от защиты этого куска, если упадёт загрузка???
Выведи весь свой поток в процедуру основного потока программы, и пошли в эту процедуру заведомо плохую ссылку, либо выполни её с отключенным интернетом. Вывалилась ошибка? Вывалившаяся ошибка внутри потока повесит его намертво. Получишь дохлую программу, которую останется только аварийно завершить.

И ещё
Код:
Application.ProcessMessages; // метод, вызываемый, если нужно дождаться окончания перерисовки визуальных контроллов
Synchronize(Sync); // синхронизация, в которой перерисовываются контроллы
Теперь подключи логику, и подумай, что не так.

Последний раз редактировалось doktor255; 08.05.2014 в 17:16.
doktor255 вне форума Ответить с цитированием
Старый 09.05.2014, 02:57   #22
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

<OFFTOP>
2 doktor255
Цитата:
northener мозг подключи, и прочитай что тебе люди пишут.
Ну ты хотя бы пить "неопределённую жидкость" перестань. Или курить "неопределенную траву". Про грибы я уже молчу.
</OFFTOP>
northener вне форума Ответить с цитированием
Старый 09.05.2014, 03:47   #23
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

northener А ты перестань влазить в разговоры. Мешаешь только.

Последний раз редактировалось doktor255; 09.05.2014 в 04:10.
doktor255 вне форума Ответить с цитированием
Старый 11.05.2014, 23:03   #24
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Переписал немного код, но соровно не правильно работает, что теперь не так?

Код:
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TNewThread.Execute;
var Num:integer;
begin
 while Work do
  begin
   CS.Enter;
   Inc(Acc);
   if Acc<proxy.Count then Num:=Acc else Work:=false;
   CS.Leave;
   form1.Memo2.Enabled:=false;
   if Work then
    begin
     HTTP:=THTTPSend.create();
     r:=TRegExpr.Create;
     HTTP.UserAgent:='Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 OPR/20.0.1387.82';
     ipmaska:='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}';
     r.Expression := ipmaska;
     try
     html:=TStringList.Create;
     if HTTP.HTTPMethod('GET', proxy.Strings[Num]) then
     begin
     html.LoadFromStream(http.Document);
     r.Expression := ipmaska;
     end;
     finally
     if http.ResultCode=200 then
     begin
     if r.Exec(html.text) then
     REPEAT
     if Work=True then
     begin
     proxys:=r.Match[0];
     sleep(5);
     Synchronize(Sync);
     end;
     UNTIL not r.ExecNext; Synchronize(Sync2);
     end;
     end;
  end;
  end;
 if Thread=0 then
 begin
 HTTP.Free;
 html.free;
 r.Free;
 form1.SpeedButton1.Enabled:=true;
 form1.SpeedButton2.Enabled:=false;
 form1.Memo2.Enabled:=true;
 form1.Memo2.Lines.Add('Успешно завершено!');
 end;
 dec(Thread);
end;

procedure TNewThread.Sync;
var
i:integer;
begin
form1.Memo2.Lines.Add(proxys);
form1.Label1.Caption:=inttostr(form1.memo2.Lines.count);
end;

procedure TNewThread.Sync2;
begin
form1.ProgressBar1.Position:=form1.ProgressBar1.Position+1;
form1.Label6.Caption:=inttostr(form1.ProgressBar1.Position);
end;
UKRtortik вне форума Ответить с цитированием
Старый 11.05.2014, 23:46   #25
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Почему то обрабатывает не все ссылки, и если поставить например 20 потоков то вообще начинает пропускать половина ссылок. В чем тут может быть проблема?
Проблема в том, что при большом количестве одновременных запросов происходят ошибки соединения. При этом нормально написанные программы делают повторные запросы, а твоя программа не делает ни хрена. Итог: программа работает не на 100%. И в коде нет ошибок. Ошибки в твоей логике. Пиши зацикливание алгоритма в случае неудачи соединения. При этом в идеале цикл должен быть не бесконечен, а к примеру выполнятся максимум 5 раз для того, чтоб исключить полное зацикливание в случае неверных входных данных.
Код:
for i := 0 to 5 do 
  begin
   try
     // получаем данные с сервера. ТОЛЬКО ДАННЫЕ. Больше в эту секцию ничего не пишется
   except end;
    if http.ResultCode=200 then break; //выходим из цикла в случае положительного ответа от сервера
  end;

  if http.ResultCode=200 then 
    begin
      // парсинг, или иные действия
    end;
И ещё момент
Код:
form1.Memo2.Enabled:=false;
Компонент работает в основном потоке приложения. А твой код исполняется в доп потоках. Связь между потоками через что нужно делать? Через синхронизацию. Это же касается HTTP, и прочих компонентов.

Последний раз редактировалось doktor255; 12.05.2014 в 00:30.
doktor255 вне форума Ответить с цитированием
Старый 15.05.2014, 13:02   #26
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

doktor255, можете скинуть поправленый код? Я что-то не понял как правильно это сделать...
UKRtortik вне форума Ответить с цитированием
Старый 15.05.2014, 13:16   #27
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

UKRtortik Готовый код на коммерческой основе, советы бесплатны. Чего желаем?
doktor255 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает многопоточность danil123 Общие вопросы Delphi 4 07.01.2013 14:55
Многопоточность garyanikin Работа с сетью в Delphi 5 16.11.2012 14:24
некоректно работает скрипт опроса на сайте logstar PHP 4 06.02.2011 17:31
многопоточность DeDoK Общие вопросы Delphi 6 01.08.2010 02:14
Многопоточность c++, некорректно работает WaitForMultipleObjects bazilior Помощь студентам 0 17.04.2010 18:51