 |
Остановить все потоки а потом снова запустить - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
09.12.2012, 21:08
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 16.10.2011
 Сообщений: 9
 Популярность: 92
 Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
|
Остановить все потоки а потом снова запустить
приветствую. столкнулся с проблемой.
в программе нужно ввести капчу. для этого нужно остановить все потоки в программе. останавливается только один, процедурой suspend, остальные продолжают работать тем самым не дают вписать в поле и отправить капчу.
(так как одна капча заменяется другой т.е. из другого потока.)
как мне остановить все потоки разом а потом по нажатию кнопки снова запустить их.
есть условие:
if pos('captcha_code',s1) >0 then
begin
...
co.suspend;
....
end;
|
|
|
09.12.2012, 21:17
|
#2
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Остановить все потоки а потом снова запустить
код остановки потока?
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
10.12.2012, 19:20
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 16.10.2011
 Сообщений: 9
 Популярность: 92
 Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
|
Re: Остановить все потоки а потом снова запустить
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
код остановки потока?
|
|
 |
|
 |
|
не совсем понимаю что вы хотите от меня услышать
если вы спрашиваете нужен ли мне код остановки потока, то:
в смысле ?  какой код
мне нужна процедура\функция которая заморозит все потоки разом при условии = true. а потом с помощью кнопки запустит их снова.
|
|
|
10.12.2012, 19:45
|
#4
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Остановить все потоки а потом снова запустить
Такое нельзя написать не зная имени объекта с потоками, что они делают, откуда планируется вызывать эту функцию...
|
|
|
11.12.2012, 15:09
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 16.10.2011
 Сообщений: 9
 Популярность: 92
 Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
|
Re: Остановить все потоки а потом снова запустить
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Такое нельзя написать не зная имени объекта с потоками, что они делают, откуда планируется вызывать эту функцию...
|
|
 |
|
 |
|
функция должна вызывается из процедуры Execute, которая как известно уже описана в классе TMyThread.
происходит post запроса на сервер. дальше проверяется условие . если оно истинное - замораживаем все потоки а дальше уже запускаем их (то же кол-во, С ТОГО ЖЕ МЕСТА) снова по нажатию кнопочки.
Добавлено через 4 часа 55 минут
забыл добавить.
вот эту паузу я делаю для того, что бы ввести капчу и отправить ее на сервер.
если ставить 1 поток:
поток останавливается (использую suspend) я ввожу капчу и отправляю ее.
при нескольких потоках получается вылазиют сразу несколько капч(image на форме только 1). как мне все ввести их по очереди чтобы они соответствовали логину\паролю которому она принадлежит?
Последний раз редактировалось *Хalyava*; 11.12.2012 в 20:04.
Причина: Добавлено сообщение
|
|
|
11.12.2012, 21:49
|
#6
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Остановить все потоки а потом снова запустить
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
12.12.2012, 20:45
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 16.10.2011
 Сообщений: 9
 Популярность: 92
 Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
|
Re: Остановить все потоки а потом снова запустить
спасибо. пробую...
подскажи еще как можно приостановить выполнение процедуры а потом с кнопки ее запустить???
тут такая фигня.
запихал я в синхронизацию код для "доставки" и ввода\отправки капчи в программу, а сама процедура синхронизации работает без остановки что собственно не дает мне возможности ввести и отправить капчу.
|
|
|
12.12.2012, 22:25
|
#8
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Остановить все потоки а потом снова запустить
создайте какой нибудь триггер в кнопке, которые выведет синхронизацию из рекурсии и продолжит работу.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
14.12.2012, 20:06
|
#9
|
|
|
|
Разведчик
|
 Регистрация: 16.10.2011
 Сообщений: 9
 Популярность: 92
 Сказал(а) спасибо: 8
Поблагодарили 12 раз(а) в 8 сообщениях
|
Re: Остановить все потоки а потом снова запустить
еще подскажите можно ли задать условие на проверку нажатия кнопки ???
if button1.click then // пример (чтобы понять что мне нужно)
|
|
|
14.12.2012, 20:24
|
#10
|
|
|
|
Разведчик
|
 Регистрация: 17.01.2012
 Сообщений: 19
 Популярность: 126
 Сказал(а) спасибо: 8
Поблагодарили 30 раз(а) в 11 сообщениях
|
Re: Остановить все потоки а потом снова запустить
Если ты действительно хочешь остановить потоки (хотя как сказано выше можно синхронизировать, но иногда не лучший вариант, например когда капча вылетает не часто, то умнее будет приостановить), то тебе нужно просто при создание потока загнать их в массив, далее пройтись по массиву циклом и остановить все. Немного кода:
Код:
a: array [1..10] of potok;//массив для хранения наших потоков
Создаём потоки, а также добавляем их в массив.
Код:
for pot:=1 to 10 do
a[pot]:=potok.Create(false);
Теперь можно манипулировать:
|
|
|
15.12.2012, 16:25
|
#11
|
|
|
|
Старший сержант
|
 Регистрация: 25.12.2011
 Сообщений: 191
 Популярность: 5259
 Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
|
Re: Остановить все потоки а потом снова запустить
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 16:00.
|
 |