Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads: Liste abarbeiten mit fester Thread Anzahl (https://www.delphipraxis.net/53465-threads-liste-abarbeiten-mit-fester-thread-anzahl.html)

quakergod 17. Sep 2005 09:13


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:
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.. :oops:


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? :cheers:

Luckie 17. Sep 2005 09:24

Re: Threads: Liste abarbeiten mit fester Thread Anzahl
 
Thread Pooling ist hier das Stichwort, denke ich mal, wen ich dein Problem richtig verstanden habe.
Zitat:

Thread pooling enables you to use threads more efficiently by providing your application with a pool of worker threads that are managed by the system.

quakergod 17. Sep 2005 09:54

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... :)

Olli 17. Sep 2005 12:45

Re: Threads: Liste abarbeiten mit fester Thread Anzahl
 
Was ist daran kompliziert? Ich mache das zB in meinem PortScanner ... ohne viel Drumherum!

quakergod 19. Sep 2005 01:03

Re: Threads: Liste abarbeiten mit fester Thread Anzahl
 
Zitat:

Zitat von Olli
Was ist daran kompliziert? Ich mache das zB in meinem PortScanner ... ohne viel Drumherum!

könntest du mir evtl. ein bisschen source geben der mir weiterhelfen könnte? :angel:

Luckie 19. Sep 2005 06:47

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. ;)

Luckie 19. Sep 2005 08:01

Re: Threads: Liste abarbeiten mit fester Thread Anzahl
 
Fertig: http://www.delphipraxis.net/internal...=430066#430066


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz