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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2013, 12:34   #1
Roman324
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 21
По умолчанию Прокси-чекер и многопоточность

Доброго времени суток. Пытаюсь разобраться с потоками. Для примера хочу реализовать прокси-чекер в потоках. Код есть, и он работает. Только потоки останавливаются на пол пути. И в чём дело понять не могу. Надеюсь на вашу помощь.

Код потока:

Код:
unit Unit2;

interface

uses
  Classes, idHTTP, SysUtils;

type
  TPotok = class(TThread)
  private
    Index:integer;
  protected
    HTTP:TidHTTP;
    line, ip, port:string;
    n: word;

    procedure good;
    procedure parsproxy;
    procedure GetIndex;
    procedure bad;
    procedure Execute; override;
  end;

implementation
uses Unit1;

procedure TPotok.bad;
begin
 form1.Memo1.Lines.Delete(Index);
end;

procedure TPotok.GetIndex;
begin
  if Form1.index<=Form1.MaxIndex then
  begin
    Index:=Form1.Index;
    Inc(Form1.Index);
  end else
    Index:=-1;
end;

procedure TPotok.parsproxy;
begin
  Form1.Memo2.Lines.Add(ip);
  Form1.Memo2.Lines.Add(port);
end;

procedure TPotok.good;
begin
  Form1.Memo2.Lines.Add(ip+':'+port);
  form1.Memo1.Lines.Delete(Index);
end;


procedure TPotok.Execute;
var i:integer;
    TryCount:integer;
begin
HTTP:=TidHTTP.Create(nil);
HTTP.ConnectTimeout:=5000;
try

while not Terminated do
begin
if Form1.Memo1.Lines.Count>0 then
begin
 synchronize(GetIndex);
  if Index=-1 then Break;

        line:=Form1.Memo1.Lines[Index];
        n:= pos(':',line);
        ip:=copy(line,1,n-1);
        port:=copy(line,n+1, n-1);

        HTTP.ProxyParams.ProxyServer:=ip;
        HTTP.ProxyParams.ProxyPort:=strtoint(port);

         try
          HTTP.Get('http://ya.ru');
          synchronize(good);
         except
          synchronize(bad);
         end;
end;
end;

finally
  HTTP.Free;
end;

end;






end.

Вызываю так:

Код:
...
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;

    procedure Button1Click(Sender: TObject);
  private

  public
   Index,MaxIndex,Threads:integer;
  end;

...


procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
  Thread:TPotok;
begin
  MaxIndex:=25555;
  Index:=0;
  Threads:=110;

  for i:=1 to Threads do
  begin
    Thread:=TPotok.Create(true);
    Thread.FreeOnTerminate:=true;
    Thread.Resume;
end;

end;
Roman324 вне форума Ответить с цитированием
Старый 18.01.2013, 13:07   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

узнаю свой код... в чем собственно проблема?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 18.01.2013, 13:15   #3
Roman324
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
узнаю свой код... в чем собственно проблема?
Каретка курсора доходит до конца Мемо и всё останавливается.

Исходник:
https://dl.dropbox.com/u/48357141/test.rar
Roman324 вне форума Ответить с цитированием
Старый 18.01.2013, 13:24   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

1
procedure TPotok.bad;
begin
form1.Memo1.Lines.Delete(Index);
end;
2
procedure TPotok.good;
begin
Form1.Memo2.Lines.Add(ip+':'+port);
form1.Memo1.Lines.Delete(Index);
end;

3
if Form1.Memo1.Lines.Count>0 then
нельзя так... сам подумай почему


как то весь код мой испортили
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 18.01.2013 в 13:31.
Slym вне форума Ответить с цитированием
Старый 18.01.2013, 13:32   #5
Roman324
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
1
procedure TPotok.bad;
begin
form1.Memo1.Lines.Delete(Index);
end;
2
procedure TPotok.good;
begin
Form1.Memo2.Lines.Add(ip+':'+port);
form1.Memo1.Lines.Delete(Index);
end;

3
if Form1.Memo1.Lines.Count>0 then
нельзя так... сам подумай почему


как то весь код мой испортили
3-го уже нету. Я немного старый проэкт скинул. Забыл сохранить.

На счёт удаления строк. Пробовал не удалять их, результат тот же.
Roman324 вне форума Ответить с цитированием
Старый 18.01.2013, 22:46   #6
Roman324
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 21
По умолчанию

Что странно, так это то, что в отладчике оно чекает до конца.
Roman324 вне форума Ответить с цитированием
Старый 20.01.2013, 03:00   #7
Roman324
Пользователь
 
Регистрация: 09.01.2013
Сообщений: 21
По умолчанию

Никто так и не подскажет как решить мою проблему?
Roman324 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется написать чекер V0stok Фриланс 0 12.10.2011 17:51
Прокси грабер-чекер gamer123 PHP 0 05.10.2010 08:29
Прокси чекер Pasha_Sh Работа с сетью в Delphi 1 14.06.2010 12:45
Прокси чекер Terikon Работа с сетью в Delphi 50 07.05.2009 17:54
чекер DeDoK Общие вопросы Delphi 0 15.04.2009 22:26