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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2013, 19:09   #11
Lifeda92
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 39
По умолчанию

Вот тело потока:

Код:
while work do
              begin
              TCS.Enter;
              Inc(Prx);
              if Prx<=Proxy.Count-1 then CrPrx:=Prx else
              work:=False;
              TCS.Leave;

              if work then
                begin
                adr:=Copy(Proxy[CrPrx], 0, Pos(':', Proxy[CrPrx])-1);
                port:=Copy(Proxy[CrPrx], Pos(':', Proxy[CrPrx])+1, Length(Proxy[CrPrx]));

                  try
                  HTTP:=TIdHTTP.Create(nil);
                  html:='';

                    with HTTP do
                      begin
                      ReadTimeout:=Form9.edt3.Value*1000;
                      ConnectTimeout:=Form9.edt3.Value*1000;
                      ProxyParams.ProxyServer:=adr;
                      end;

                      HTTP.ProxyParams.ProxyPort:=StrToInt(port);

                      try
                      html:=HTTP.Get('http://checkip.dyndns.com/');
                      except
                      end;

                    if Pos(adr, html)<>0 then
                      begin
                      inc(good);
                      inc(prg);
                      Synchronize(sync2);
                      end

                    else
                    begin
                    inc(bad);
                    inc(prg);
                    Synchronize(sync1);
                    end;

                  finally
                  FreeAndNil(HTTP);
                  end;

                end;

              end;
Dec(m);
if m=-1 then
  begin
  Synchronize(sync4);
  end;
Dec(n);
Lifeda92 вне форума Ответить с цитированием
Старый 23.10.2013, 19:29   #12
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

код Execute давай...
мне кажется ты там в гуй лезешь
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 23.10.2013, 19:46   #13
Lifeda92
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 39
Радость

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В потоке что именно делаете? Код бы посмотреть.

Можно добавить свойство типа IsPaused: boolean (и наверно стоит сделать работу с ним TCriticalSection), при паузе ставить его в True и в потоках переодически проверять и делать что-то типа
Код:
while IsPaused do
  Sleep(50);
Спасибо тебе добрый человек. Поставил перед синхронизацией с VCL потоком и все супер.
Lifeda92 вне форума Ответить с цитированием
Старый 23.10.2013, 19:53   #14
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Form9.edt3.Value*1000;
По-моему не стоит так к этому обращаться из потока. Оно изменяется во время работы или что? Если нет, то тем более стоит передавать это значение в поток при старте, а не напрямую в форму стучаться из него (и если да, то тоже).

work это что? Если это для завершения потока (по кнопке в UI), то там вроде есть Terminated/Terminate.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.10.2013, 20:04   #15
Lifeda92
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 39
Сообщение

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
По-моему не стоит так к этому обращаться из потока. Оно изменяется во время работы или что? Если нет, то тем более стоит передавать это значение в поток при старте, а не напрямую в форму стучаться из него (и если да, то тоже).

work это что? Если это для завершения потока (по кнопке в UI), то там вроде есть Terminated/Terminate.
Хорошо, спасибо, буду при старте загонять в переменную значение из едита
и использовать переменную в потоке вместо обращения к едиту из потока.
Lifeda92 вне форума Ответить с цитированием
Старый 23.10.2013, 20:12   #16
Lifeda92
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 39
Сообщение

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
По-моему не стоит так к этому обращаться из потока. Оно изменяется во время работы или что? Если нет, то тем более стоит передавать это значение в поток при старте, а не напрямую в форму стучаться из него (и если да, то тоже).

work это что? Если это для завершения потока (по кнопке в UI), то там вроде есть Terminated/Terminate.
work это у меня переменная логического типа.

При нажатии на кнопку старт становится work:=true;
Когда обработает все строки в TStringList становится в work=false; чтобы дать команду на выход из цикла и в последствии уничтожения и освобождения памяти от всех потоков.
Но также, я использую work и для кнопки стоп как work:=false;
Lifeda92 вне форума Ответить с цитированием
Старый 23.10.2013, 20:17   #17
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я понял, что логического, я про цель использования спрашивал и где она находится

Ну вот я и говорю, что у TThread есть свойство Terminated и метод Terminate для сигнала завершения из UI.

А после проверки списка можно и просто выйти любым другим способом, это ж все равно во всех потоках проверяете.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 23.10.2013 в 20:20.
Alex11223 вне форума Ответить с цитированием
Старый 23.10.2013, 20:33   #18
Lifeda92
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 39
Радость

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я понял, что логического, я про цель использования спрашивал и где она находится

Ну вот я и говорю, что у TThread есть свойство Terminated и метод Terminate для сигнала завершения из UI.

А после проверки списка можно и просто выйти любым другим способом, это ж все равно во всех потоках проверяете.
Хорошо, спасибо за советы, это тоже сделаю.
Lifeda92 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать программу многопоточной (достаточно двух потоков). Delphi user_12 Помощь студентам 0 27.12.2011 20:40
Проблема синхронизации потоков Teor Общие вопросы .NET 4 17.06.2011 15:50
Поисковик по маске. Использование потоков в среде(tthread) Delphi. lnikon Общие вопросы Delphi 1 22.07.2010 19:31
Реализация двух потоков, работа с буфером, механизм семафоров (С++ или Delphi) shoonya Помощь студентам 0 05.04.2010 14:08
delphi теория потоков tanek Помощь студентам 0 19.03.2010 19:40