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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 00:10   #1
record222
Форумчанин
 
Регистрация: 23.09.2009
Сообщений: 127
По умолчанию Подвисают потоки + indy

Доброе время суток друзья.

Подвисает программа, при отправке пост данных.
Не работает многопоточность....

Код:
procedure Checker.Execute;
var
str:string;
begin
while work do
begin
  CS.Enter;
  inc(dom_cur);
  if dom_cur<form1.memo1.Lines.Count then Curdom:=dom_cur else begin
   dom_cur:=-1;
  inc(dom_cur);
  Curdom:=dom_cur;
  end;
  if form1.memo1.Lines.Count=0 then work:=false;
  CS.Leave;

  if WORK then
    begin
    domain:=form1.Memo1.Lines[curdom];
    res:= checker_domain(domain); - Это действие работает в многопоточности. Ставишь 20 потоков и оно валит. А вот следующее RegSync, тормозит весь процесс.
    if pos('is Available', res)>1 then  Synchronize(regsync) else
      if pos('is Unavailable', res)>1 then RezA:=1 else
        if pos('Money', res)>1 then RezA:=2 else RezA:=3;
    Synchronize(Sync);
      end;
    end;
end;

procedure Checker.regsync;
var
http2:Tidhttp;
data:tstringlist;
today : TDateTime;
begin
data:=Tstringlist.Create;
http2:=Tidhttp.Create;
http2.HandleRedirects:=false;
http2.AllowCookies:=true;
http2.RedirectMaximum:=3;

 today := Time;
data.Add('username='+akk_buy[0]);
data.Add('password='+akk_buy[1]);
data.add('phone=+7 495 8102233');
data.add('fax=+7 495 8102233');
data.Add('e_mail='+akk_buy[0]);
try
http2.Post('http://api/api/', data); - Подвисает вот на этом действии... Когда это действие исполниться - программе отвисает!
//form1.Memo6.Lines.Add(TimeToStr(today));

except

end;
data.Free;
http2.Free;
end;

На форме присутствует компонент AntiFreeze, но почему то не помагает.

Последний раз редактировалось record222; 12.06.2013 в 00:13.
record222 вне форума Ответить с цитированием
Старый 12.06.2013, 00:37   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, все что выполняется в синхрониз, все это выполняется лишь главным потоком, и остальные потоки ни в один синхрониз не войдут.
переписывайте код, выносите все лишнее из процедуры, тем более у вас нет нужды синхронизировать её, ибо у вас нет обращение к форме из нее.

а вообще забавно, обращение к форме у вас без синхронизации, при этом в синхронизации нет обращения...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2013, 20:01   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Во первых, чекеры, бруты и вся остальная ху*ня подобного рода запрещено законом РФ(стать 272 уголовного кодекса РФ).
Во вторых, Application.ProcessMessages;
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.06.2013, 20:14   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Во вторых, Application.ProcessMessages;
Не тот случай для этого.
Человек_Борща вне форума Ответить с цитированием
Старый 12.06.2013, 21:39   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Не тот случай для этого.
у него цыкл while do.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.06.2013, 22:11   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

саша40, у него поток как бы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2013, 22:24   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Подвисает вот на этом действии... Когда это действие исполниться - программе отвисает!
А ты это действие (всю эту функцию) в поток, который ее вызывает воткни как метод. Пусть и она сопроцессу этому будет принадлежать.
Тогда и синхронизация не понадобится особо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать массив байт [D7]Indy => [XE2]Indy Человек_Борща Работа с сетью в Delphi 1 15.09.2012 22:06
У меня borland developer studio delphi 2006 так вот как вставить на вкладку tool palette компоненты Indy Clients и Indy Misc Artem_host Общие вопросы Delphi 0 01.02.2012 09:55
Потоки Владимир Чернов Помощь студентам 0 08.12.2010 23:56
как обновить indy 9 на indy 10 Пилигрим Компоненты Delphi 16 30.04.2010 10:11
Indy 9 против Indy 10 OrdJONY Свободное общение 2 08.11.2008 20:28