Einzelnen Beitrag anzeigen

quakergod

Registriert seit: 20. Mär 2003
Ort: NRW
129 Beiträge
 
Delphi 7 Enterprise
 
#1

Threads: Liste abarbeiten mit fester Thread Anzahl

  Alt 17. Sep 2005, 09:13
hi,
ich programmiere an einem proxychecker und bin heute nacht auf threads umgestiegen,
eigentlich ein Quereinstieg, hab mir sources angeguckt, rumprobiert, etc.

An einer sache hänge ich:
Ich habe in einem Memo die proxys stehen und das Programm testet die Proxys in einem Thread,

ich hätte gerne das immer max. 5 Proxys gleichzeitig getestet werden, kriege das aber nicht hin!


Thread Unit
Delphi-Quellcode:
unit DownlThread;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Gauges, unit1, StdCtrls, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdBaseComponent;

type
  TDownlThread = class(TThread)
  private
    { Private declarations }
    HTTP: TIdHTTP;
    proxystring: string;
  protected
    { Protected declarations }
    procedure Execute; override;
  public
    { Public declarations }
    constructor Create(CreateSuspended: Boolean; proxy: string);
    destructor Destroy; override;
  end;

implementation

constructor TDownlThread.Create(CreateSuspended: Boolean; proxy: string);
begin
  inherited Create(false);
  HTTP := TIdHTTP.Create(nil); // HTTP-Kompo wird dynamisch erstellt
  proxystring := proxy;
end;

destructor TDownlThread.Destroy;
begin
  HTTP.Free;
  inherited Destroy;
end;

procedure TDownlThread.Execute;
var
  response: string;
begin
  HTTP.ConnectTimeout := 15000;
  HTTP.ReadTimeout := 15000;
  response := '1';
  try
    Application.ProcessMessages;
    response := HTTP.Get('http://domain.com/proxychk.php?proxy=' + proxystring);
    Application.ProcessMessages;
  except
    on E: Exception do
      Form1.memError.Lines.Add(proxystring + ' : ' + E.Message);
  end;

  if response = '0then Form1.memGoodProxy.Lines.Add(Proxystring) else Form1.memBadProxy.Lines.Add(Proxystring);
  Form1.lblAnzThreads.Caption := inttostr(strtoint(Form1.lblAnzThreads.Caption) - 1);
end;

end.
ich weiss das ist nicht die feine englische art, aber es funktioniert soweit..


Aufruf-Prozedur
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var threads, anzahl, i: integer;
  proxy: string;
begin
  threads := strtoint(edtThreads.Text) - 1;
  anzahl := memProxy.Lines.Count;

  for i := 0 to threads do
  begin
    proxy := memProxy.Lines.Strings[i];
    memproxy.Lines.Delete(i);
    lblAnzThreads.Caption := inttostr(strtoint(lblAnzThreads.Caption) + 1);
    TDownlThread.Create(false, proxy);
  end;
end;
Bei klick auf den Button werden 5 threads mit den ersten 5 einträgen im Memo memProxy gestartet und die einträge werden gelöscht. leider gehts dann nicht weiter, das programm soll aber alle einträge im Memo bearbeiten..


kann mir jemand weiterhelfen?
I love Delphi-Praxis !
  Mit Zitat antworten Zitat