Всем привет.
Назрел такой вопросик:
Допустим у меня программа выполняет какие-то две процедуры.
1. Допустим граббит прокси.
2. Надо что бы прокси чекало на валид.
(просто пример)
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
TNewThread.Create(false);
end;
procedure TNewThread.Execute;
begin
// ну и тут мы что-то выполняем.
end;
Если я добавлю 2 кнопку которая будит чекать прокси на валид, то она будит уже не в потоке и программа попусту будит зависать.
Как мне добавить многопоточность что бы форма при выполнении 2 процедуры не зависала?.
И еще проблема с прокси...
Допустим я кидаю 1 аккаунт и 3 прокси, если прокси валидные, то будит
на 1 аккаунт, 3 удачных аккаунта, а мне надо что бы она не повторяла цикл на этом аккаунте если он гуд, а то так у меня 1000 проксей валид/не валид и он будит на 1 аккаунт эти 1000 проксей чекать и будут удачые/неудачные
Например записываешь адрес в стринглист1 порт в стринглист2 дальше устанавливаешь тайм аут для хттп и в екзекуте запускаешь цикл и чекаешь
выглядеть будет как то так
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
begin
http.ReadTimeout := 3000; // в милисекундах
TNewThread.Create(false);
end;
дальше екзекут
Цитата:
procedure TNewThread.Execute;
var i : integer;
begin
if StrList1.Count=Strlist2.count
then
begin
for i:= 0 to strlist1 -1 do
begin
Http.ProxyParams.ProxyServer:=StrList1[i];
Http.ProxyParams.ProxyPort:=StrList2[i];
S := http.Get('http://ya.ru/');
if Pos('ya.ru', resp) <> 0 then
Memo1.lines.add(StrList1[i]+':'+StrList2[i]) else //говорим что не валидный
Memo2.lines.add(StrList1[i]+':'+StrList2[i]); //говорим что валидный
end;
end;
end;
только в 1 потоке оно будет долго перебирать , как сделать в нескольких? Юзай поиск
Например записываешь адрес в стринглист1 порт в стринглист2 дальше устанавливаешь тайм аут для хттп и в екзекуте запускаешь цикл и чекаешь
выглядеть будет как то так
дальше екзекут
только в 1 потоке оно будет долго перебирать , как сделать в нескольких? Юзай поиск
Вы не понели...
У меня 2 кнопки, 1 допустим грабит прокси, 2 кнопка чекает на валид.
в 1 кнопки я сделал в потоке, а во второй не могу, из-за этого при выполнении кода 2 кнопки программа зависает
кароче вот пример
Цитата:
button1.click
begin
tnewthread.create(false);
end;
procedure TNewThread.Execute;
begin
// мой код и когда я юзаю 1 кнопку все окей программа не зависает.
end;
для 2 кнопки не получается повторить что тут даете ошибку TNewThread.Execute;
Т.е для второй кнопки писал
Цитата:
button2.click
begin
tnewthread.create(false);
end;
procedure TNewThread.Execute; // дает ошибку :|
begin
end;
а мне надо что бы и на 2 кнопку работал поток что бы программа при нажатии 2 кнопки не зависла.
Добавлено через 13 минут
все решил проблему почитал статью (мб кому надо про потоки давольно таки интересно [Ссылки могут видеть только зарегистрированные пользователи. ] )
добавил
Ребят помогите теперь с проксями, кароче программа логинится на сайт все окей, да но вот есть одно НО если я кину в мемо 3 прокси и они будут валид, то на 1 аккаунт у меня выдаст 3 гуда :|
а мне надо что бы такого не было, вот зашло гуд или бэд и все, что бы он не брал и не переберал с так.А то кину 10000 проксей и 100 логинов, и он каждый логин с пасом будит ставить по очереди к каждой прокси...
Последний раз редактировалось pavel!; 25.04.2012 в 15:46.
Причина: Добавлено сообщение
естественно программа будет виснуть ,ты не правильно поток запускаешь , так будет правильно
Цитата:
// создание экземпляра класса
Thread := TMultiThread.Create(true);
// после завершения потока, уничтожать его
Thread.FreeOnTerminate := true;
// запуск потока
Thread.Resume;
ребят не как не могу с многопоточностью справится, т.е запустить сразу не 1 поток, а допустимм 100 или 500
все летит в ерор или программа зависает
Пробую так:
Цитата:
for Thread:=1 to StrToInt(sEdit2.text) do
TNewThread.Create(false);
Thread:=strtoint(sEdit2.Text);
Thread:integer
потом идет
procedure TNewThread.Execute;
begin
\\\мой код
и в конце
dec(Thread);
end;
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для простых действий необязательно использовать класс TThread.
Можно пользоваться WinApiBeginThread (не CreateThread)
Пример вызова с передачей нескольких параметров (подробная информация есть в гугле). Важно: Процедура не должна относиться ни к какому классу.
[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось Рэйзор; 28.04.2012 в 18:10.