Guest User

DelphiManyThreadds

a guest
Dec 2nd, 2011
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.15 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics,
  7.   Controls, Forms, Dialogs, StdCtrls, IdAntiFreezeBase,
  8.   IdAntiFreeze, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  9.   IdHTTP, SyncObjs, ComCtrls, IdIOHandler, IdIOHandlerSocket,
  10.   IdIOHandlerStack, IdSSL, IdSSLOpenSSL;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     OpenDialog1: TOpenDialog;
  15.     IdHTTP1: TIdHTTP;
  16.     IdAntiFreeze1: TIdAntiFreeze;
  17.     Label1: TLabel;
  18.     Label2: TLabel;
  19.     Label3: TLabel;
  20.     Label4: TLabel;
  21.     Button2: TButton;
  22.     ProgressBar1: TProgressBar;
  23.     Edit1: TEdit;
  24.     IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
  25.     Button3: TButton;
  26.     Memo1: TMemo;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  29.     procedure Button2Click(Sender: TObject);
  30.     procedure Button3Click(Sender: TObject);
  31.   private
  32.     { Private declarations }
  33.   public
  34.     { Public declarations }
  35.   end;
  36.  
  37.   TNewThread = class(TThread)
  38.   private
  39.  
  40.    FProxy :string;
  41.    FPPort:integer;
  42.    get: string;
  43.    Rez : Integer;
  44.   protected
  45.     procedure Execute; override;
  46.   public
  47.     procedure Sync;
  48.     constructor Create(CreateSuspended: Boolean);
  49.   end;
  50.  
  51.  
  52. var
  53.   Form1: TForm1;
  54.   Proxys:Tstringlist;
  55.   Thread, Acc, proxy:integer;
  56.   Work:boolean;
  57.   CS:TcriticalSection;
  58.   GoodFile, BadFile: textfile;
  59.  
  60. implementation
  61.  
  62. {$R *.dfm}
  63.  
  64. constructor TNewThread.Create(CreateSuspended: Boolean);
  65. begin
  66.   inherited Create(CreateSuspended);
  67. end;
  68.  
  69. procedure TForm1.Button2Click(Sender: TObject);
  70. begin
  71.  
  72.  label1.Caption:='0';
  73.  label2.Caption:='0';
  74.  ProgressBar1.Max:=Proxys.Count;
  75.  ProgressBar1.Position:=0;
  76.  Acc:=-1;
  77.  Proxy:=-1;
  78.  Work:=true;
  79.  for Thread:=1  to strtoint(Edit1.Text) do
  80.   TNewThread.Create(false);
  81.  Thread:=strtoint(Edit1.Text);
  82. end;
  83.  
  84. procedure TForm1.Button3Click(Sender: TObject);
  85. begin
  86.  OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
  87.  if OpenDialog1.Execute then
  88.   begin
  89.    Proxys.Clear;
  90.    Proxys.LoadFromFile(OpenDialog1.FileName);
  91.   end;
  92. end;
  93.  
  94. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  95. begin
  96.  Proxys.Free;
  97. CS.Free;
  98. end;
  99.  
  100. procedure TForm1.FormCreate(Sender: TObject);
  101. begin
  102. Proxys:=Tstringlist.Create;
  103. CS:=TCriticalSection.Create;
  104. end;
  105.  
  106. procedure TNewThread.Execute;
  107. var
  108.     CurProxy:integer;
  109.  
  110.     HTTP: TIdHTTP;
  111.     ssl:  TIdSSLIOHandlerSocketOpenSSL; //Если отключаем все идет гладко
  112. begin
  113.  while Work do
  114.   begin
  115.    CS.Enter;
  116.    Inc(proxy);
  117.    if proxy<Proxys.Count then CurProxy:=proxy else Work:=false;
  118.    CS.Leave;
  119.  
  120.    if Work then
  121.     begin
  122.  
  123.      FProxy:=Copy(Proxys[CurProxy],1,Pos(':',Proxys[CurProxy])-1);
  124.      FPPort:=StrToInt(Copy(Proxys[CurProxy],Pos(':',Proxys[CurProxy])+1,Length(Proxys[CurProxy])));
  125.      HTTP:=TIdHTTP.create;
  126.      ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);  //Если отключаем все идет гладко
  127.      HTTP.IOHandler:=ssl;    //Если отключаем все идет гладко
  128.      http.ConnectTimeout:=5000;
  129.      http.ReadTimeout:=5000;
  130.      HTTP.ProxyParams.ProxyServer:=FProxy;
  131.      HTTP.ProxyParams.ProxyPort:=FPPort;
  132.      HTTP.HandleRedirects:=false;
  133.      try
  134.      if Pos('www.artlebedev.ru', HTTP.get('http://ya.ru'))<>0 then
  135.      Rez:=1 // В случае если наши в коде   artlebedev.ru
  136.      else
  137.      rez:=-1; // В случае если НЕ наши в коде
  138.      except
  139.      Rez:=-1;  // Прокси не ответил
  140.      end;
  141.  
  142.      HTTP.Free;
  143.      Synchronize(Sync);
  144.     end;
  145.   end;
  146.  
  147.  dec(Thread);
  148.  if Thread=0 then ShowMessage('OK');
  149. end;
  150.  
  151. procedure TNewThread.Sync;
  152. begin
  153.  case Rez of
  154.    1:begin  // Если валидный
  155.       Form1.Memo1.Lines.Add(FProxy+':'+inttostr(FPPort));
  156.       Form1.label1.Caption:=IntToStr(StrToInt(Form1.label1.Caption)+1);
  157.       Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
  158.      end;
  159.   -1:begin  // Не валидный
  160.       Form1.label2.Caption:=IntToStr(StrToInt(Form1.label2.Caption)+1);
  161.       Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
  162.      end;
  163.  end;
  164. end;
  165.  
  166. end.
  167.  
Advertisement
Add Comment
Please, Sign In to add comment