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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 22:14   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию Приостановка потока

Как правИльней приостановить поток, перед отправкОй постом данНых, то есть поток сначала заходит на сайт, ищет капчу, получает, выводит на другую форму и приостанавливается до нажатия кнопок ok или cancel
Код:
procedure TMyThread.Execute;
HTTP_1.get('айт + 'login.php?r=',s);
If pos('image.php?', s.datastring)>0 then
begin
synchronyze(capcha)
end
else
inf.Add('username=' +Login);
inf.Add('password=' + Password);
HTTP_1.Post(сайт +'login.php',inf,s);
inf.Free;
end;

procedure.capcha;
 var
 inf:TStringList;
img: TMemoryStream;
png: TPNGObject;
begin 
   inf:=tstringlist.create;
 img:=TMemoryStream.Create;
 HTTP_1.get(сайт + 'image.php?',img);
 img.Position:=0;
 png:= TPNGObject.Create;
 png.LoadFromStream(img);
 Form2.Image1.Picture.Assign(png);
png.Free;
img.Free;
Form2.Edit1.Text:= '';
Form2.show;
try
inf.Add('username=' +Login);
inf.Add('password=' +Pass);
inf.Add('code=' + Form9.Edit1.Text);
finally
inf.Free;
end;

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

глобальная переменная например.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.11.2010, 00:20   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

пробывал так
Код:
var
  Form2: TForm2;
  Pay:BOT;//так как при вызове потока Pay:=BOT.Create(True);

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
BOT.Resume;
end;
Код:
procedure BUX.capcha;
 var
 inf:TStringList;
img: TMemoryStream;
png: TPNGObject;
begin
   inf:=tstringlist.create;
   img:=TMemoryStream.Create;
 HTTP_BUX.get('http://' + Url_Pay +'image.php?',img);
 img.Position:=0;
 png:= TPNGObject.Create;
 png.LoadFromStream(img);
 Form2.Image1.Picture.Assign(png);
png.Free;
img.Free;
Form2.Edit1.Text:= '';
Form2.show;
try
Suspended:=true;
inf.Add('username=' +Login);
inf.Add('password=' +Pass);
inf.Add('code=' + Form9.Edit1.Text);
finally
inf.Free;
end;
end;
Ну всё таки как правельно вызвать приостановку потока в нутри него и продолжить выполнение при клики кнопки на форме?

Последний раз редактировалось Stilet; 15.11.2010 в 09:55.
bulldog5293 вне форума Ответить с цитированием
Старый 16.11.2010, 15:25   #4
YYYYY
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 28
По умолчанию

Кинь на форму кнопку "ПАУЗА" . В обработчик ON_CLICK запиши Bot.suspend (или Bot.suspended:=true) и приостанавливай поток, как программно из потока, так и по-нажатию.
YYYYY вне форума Ответить с цитированием
Старый 16.11.2010, 21:47   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для интернета(IO короче) не советую так делать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.11.2010, 02:12   #6
OUTLAW2009
 
Регистрация: 15.01.2010
Сообщений: 5
По умолчанию

Глобальная переменная Pause: Boolean;
общая для всех потоков
а в классе потока такой метод:
Код:
procedure DoPause;
begin
  while Pause do Sleep(1000);
end;
и вызываешь ее где тебе надо чекать на паузу
либо же, если версия дельфи позволяет в классовое (статик) поле потока, чтобы было по ООП-фэншую
OUTLAW2009 вне форума Ответить с цитированием
Старый 17.11.2010, 05:24   #7
YYYYY
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 28
По умолчанию

Мне кажется, что проверять переменную каждую секунду - как минимум не рационально. Суть в чём?- выполнить из потока какую-либо процедуру главного или другого модуля. А в этой процедуре сразу приостановить поток. И будет он стоять, как вкопаный (и при работе с интернетом тоже - проверено). Впрочем выбирайте способ приостановки Сами.

Последний раз редактировалось YYYYY; 17.11.2010 в 05:25. Причина: орф. ошибка
YYYYY вне форума Ответить с цитированием
Старый 17.11.2010, 18:10   #8
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Вопрос решил так
Код:
Form2.show;
try
 while Suspended do
   Resume;
 Suspend;
НО теперь не знаю как при нажатие кнопки его продолжить
Пробывал, так
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
Pay.Resume;
//  suspended:=false
 //Resume;
end;
Но не хочет

Последний раз редактировалось bulldog5293; 17.11.2010 в 21:08.
bulldog5293 вне форума Ответить с цитированием
Старый 17.11.2010, 18:51   #9
YYYYY
Пользователь
 
Регистрация: 16.08.2009
Сообщений: 28
По умолчанию

Если перевести Ваш код на русский язык, то получится:
"пока приостановлен - делать
Продолжить;
Приостановить;
Смысл?
А как продолжить, так у Вас описано : Resume;(это из потока)
или Pay.Suspended:= false; (по нажатию кнопки, но не из потока).
И ещё можно использовать TThread.CurrentThread.Suspended:=tr ue(false);
где CurrentThread - выполняемый сейчас поток.
Воспользуйтесь отладкой (клавиша F7).
Ну и (на всяк случай) поток возобновить можно только из-вне.

Последний раз редактировалось YYYYY; 17.11.2010 в 18:56.
YYYYY вне форума Ответить с цитированием
Старый 17.11.2010, 21:08   #10
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
пока приостановлен - делать
Продолжить;
Приостановить;
Смысл?
Код:
while Suspended do
   Resume;
 Suspend; //если убрать то он не ждёт реагирования на кнопку в форме, т.к. туда попадает капчпа с формы 2
а про
Код:
 TThread.CurrentThread.Suspended:=true(false);
нечего не нашёл

Нашёл
Код:
  If not (BOT = nil) then Suspended:=not Form2.Button1.Resume;
но ошибка на Resume падает

Последний раз редактировалось bulldog5293; 17.11.2010 в 21:48.
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приостановка\продолжение потока bulldog5293 Общие вопросы Delphi 6 20.09.2010 21:47
приостановка программы Medwedxxx Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.07.2010 10:42
[Idhttp] Приостановка get-запроса EaRLL Работа с сетью в Delphi 3 27.09.2009 18:43
приостановка выполнения процедуры BESS Общие вопросы Delphi 5 15.09.2008 00:53
Приостановка программы Hintman Общие вопросы Delphi 6 14.04.2007 23:38