![]() |
Threads: Liste abarbeiten mit fester Thread Anzahl
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:
ich weiss das ist nicht die feine englische art, aber es funktioniert soweit.. :oops:
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. Aufruf-Prozedur
Delphi-Quellcode:
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..
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; kann mir jemand weiterhelfen? :cheers: |
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
![]() Zitat:
|
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
uff, hab grad ein bisschen zum thema POOLING gesucht und ich glaube das ist schon zuviel des guten,
ich will doch nur eine liste mit z.bsp 200 einträgen mit maximal X threads automatisch abarbeiten lassen... :) |
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
Was ist daran kompliziert? Ich mache das zB in meinem PortScanner ... ohne viel Drumherum!
|
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
Zitat:
|
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
Du findest seinen Portscanner auf seiner Seite, ist mit Source. Aber ich sage dir, da wirst du nicht so einfach durchsteigen. Mal sehen, ob ich mein Beispiel zum Thread-Pooling zum Laufen bringe, das ist etwas einfacher. ;)
|
Re: Threads: Liste abarbeiten mit fester Thread Anzahl
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz