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 = '
0'
then 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?