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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2014, 20:54   #1
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию Некоректно работает многопоточность

Все Добрый Вечер!

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

procedure TNewThread.Execute;
var
Num:integer;
html:Tstringlist;
ipmaska:string;
HTTP:THTTPSend;
r:TRegExpr;
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();
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:=TRegExpr.Create;
html:=TStringList.Create;
r.Expression := ipmaska;
HTTP.HTTPMethod('GET', proxy.Strings[Num]);
try
html.LoadFromStream(http.Document);
r.Expression := ipmaska;
if http.ResultCode=200 then
begin
if r.Exec(html.text) then
REPEAT
proxys:=r.Match[0];
sleep(50);
Application.ProcessMessages;
Synchronize(Sync);
if not Work then
begin
Break;
end;
until not r.ExecNext;
Synchronize(Sync2);
end;
finally
HTTP.Free;
html.free;
r.Free;
end;
end;
end;
if Thread=0 then
begin
form1.SpeedButton1.Enabled:=true;
form1.SpeedButton2.Enabled:=false;
form1.Memo2.Enabled:=true;
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;
Почему то обрабатывает не все ссылки, и если поставить например 20 потоков то вообще начинает пропускать половина ссылок. В чем тут может быть проблема?
UKRtortik вне форума Ответить с цитированием
Старый 06.05.2014, 21:20   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Код:
HTTP.HTTPMethod('GET', proxy.Strings[Num]);
Если при выполнении этой части кода, к примеру, произойдёт ошибка соединения, что тогда?
doktor255 вне форума Ответить с цитированием
Старый 06.05.2014, 21:36   #3
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

как то так тогда нужно?

Код:
try
HTTP.HTTPMethod('GET', proxy.Strings[Num]);
html.LoadFromStream(http.Document);
r.Expression := ipmaska;
if http.ResultCode=200 then
begin
UKRtortik вне форума Ответить с цитированием
Старый 06.05.2014, 21:45   #4
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

UKRtortik Попробуй, и сам ответишь на свой вопрос.
doktor255 вне форума Ответить с цитированием
Старый 06.05.2014, 21:46   #5
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

не помогло.

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Код:
HTTP.HTTPMethod('GET', proxy.Strings[Num]);
Если при выполнении этой части кода, к примеру, произойдёт ошибка соединения, что тогда?
Там проверка на код соеденения есть

Последний раз редактировалось Stilet; 08.05.2014 в 11:43.
UKRtortik вне форума Ответить с цитированием
Старый 06.05.2014, 22:16   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Там это где? В параллельной вселенной?
doktor255 вне форума Ответить с цитированием
Старый 06.05.2014, 22:18   #7
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

if http.ResultCode=200 then
UKRtortik вне форума Ответить с цитированием
Старый 06.05.2014, 22:45   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Рассказываю краткое содержание предыдущей серии. Если при попытке соединения с сервером произойдёт ошибка (сбой интернет), синапс вывалит исключение. А теперь расскажи мне, как обрабатываются исключения? Разрешаю подсмотреть в гугл.
doktor255 вне форума Ответить с цитированием
Старый 06.05.2014, 22:56   #9
UKRtortik
Форумчанин
 
Регистрация: 25.02.2014
Сообщений: 366
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Рассказываю краткое содержание предыдущей серии. Если при попытке соединения с сервером произойдёт ошибка (сбой интернет), синапс вывалит исключение. А теперь расскажи мне, как обрабатываются исключения? Разрешаю подсмотреть в гугл.
Блоки - [try - except] и [try - finally] или я что-то не так понял?
UKRtortik вне форума Ответить с цитированием
Старый 06.05.2014, 23:13   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Понять та ты понял. Но рассказывать то начал про ResultCode. Подумай.
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