Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads (https://www.delphipraxis.net/127390-threads.html)

badenixe63 12. Jan 2009 16:23


Threads
 
Hallo Leute,

ich hab schon mehrere Tutorials durchgelesen, aber irgendwie stehe ich komplett aufm Schlauch. Kann mir jemand mal ein Beispiel zeigen, wie man in Turbo Delphi Explorer 2006 einen Thread macht, der hello world sagt oder so ?

Vielen Dank
badenixe63

Sir Rufo 12. Jan 2009 16:31

Re: Threads
 
Ein Thread ist nicht interaktiv, sondern arbeitet im Hintergrund ... also von daher mit "Hello World..." ist da nix ;)

DeddyH 12. Jan 2009 16:32

Re: Threads
 
Und mit "Hello Thread" auch nicht (SCNR^^)

Sir Rufo 12. Jan 2009 16:38

Re: Threads
 
Aber hier ist mal so ein Thread-Gerüst
http://www.delphipraxis.net/internal...=965602#965602

badenixe63 12. Jan 2009 18:45

Re: Threads
 
gut, das Programm hab ich mir angeguckt, und es mal kompiliert, aber ich bin der Sache immernoch nicht viel näher.

Um es mal auf den Punkt zu bringen: Ich habe ein Programm, mit TTimer, der runterzählt. Wenn der auf 0 ist, dann soll ein Thread gestartet werden, der einige HTTP Requests macht und sich dann wieder schlafen legt. Dann fängt der Timer wieder an runterzuzählen und bei 0 usw.

Der Rest ist ja einfach, nur die Requests möchte ich in einen extra Thread haben, weil die lange dauern und die Form sich während dessen nicht bewegen lässt. Die Funktionen sind alle fertig, nur soll jetzt die eine in nem Thread ausgeführt werden, wie krieg ich das hin ??

Klaus01 12. Jan 2009 19:34

Re: Threads
 
Guten Abend,

vom Prinzip könnte es in etwa so laufen:
(Habe es nicht getestet)

Delphi-Quellcode:
type

  THttpRequestThread = class(TTHread)
    private
      URLList: TStringList;
      idHttp : TidHttp;
      procedure enableTimer;
    protected
      procedure execute;override;
    public
      constructor create(AURLList:TStringList);
  end;

implementation


constructor THttpRequestThread.create(AURLList:TStringList);
begin
  URLList :=TStringList.create;
  URLList.assign(AURLList);
  idHttp := TidHttp.create;
  inherited create(false);
end;

procedure THttpRequestThread.enableTimer;
begin
  TForm1.Timer1.enabled := true;
end;

procedure THttpRequestThread.execute;
var
  i: Integer;
  s: String;
begin
  i:=0;
  while (not terminated) and (i < URLList.count -1) do
    begin
      s:=idHttp.get(URLList[i];
      // mache etwas mit s
      inc(i);
    end;

  URLList.free;
  idHttp.free;
  synchronize(enableTimer);
end;

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  httpRequestThread: THttpRequestThread;
begin
  (sender as TTimer).Enabled:=false;
   httpRequestThread := THttpRequestThread.create(URLList);

end;
Grüße
Klaus

badenixe63 13. Jan 2009 13:59

Re: Threads
 
Ich hab erstmal nur versucht eine Seite zu kriegen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, idHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

//Thread Klasse erstellen
type
  TRequestThread = class(TThread)
    private
     //variablen, die ich verwenden möchte
     myUrl:String;
     myHTTP:TidHTTP;
    protected
     procedure execute;override;
    public
     constructor Create(url:String);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TRequestThread.Create(url: string);
begin
  //variablen initialisieren
  myUrl := url;
  myHTTP.Create(nil);
  inherited Create(false);
end;

procedure TRequestThread.Execute;
begin
  //die Seite holen
  myHTTP.Get(myUrl);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 httpRequestThread:TRequestThread;
begin
 //und endlich gehts los... denkste, hier bricht das Programm mit ner AccessViolation ab.
 httpRequestThread.Create('http://www.google.de/');
end;

end.
delphi kompiliert das Programm fröhlich und wenn man auf den Button drückt kommt die AccessViolation

DeddyH 13. Jan 2009 14:04

Re: Threads
 
Zitat:

Delphi-Quellcode:
myHTTP.Create(nil);

Das sollte wohl
Delphi-Quellcode:
myHTTP := TIdHTTP.Create(nil);
heißen, oder?

NormanNG 13. Jan 2009 14:10

Re: Threads
 
...

und das
Delphi-Quellcode:
var
httpRequestThread:TRequestThread;
begin
//und endlich gehts los... denkste, hier bricht das Programm mit ner AccessViolation ab.
httpRequestThread.Create('http://www.google.de/');
end;
besser so

Delphi-Quellcode:
var
httpRequestThread:TRequestThread;
begin
//und endlich gehts los... denkste, hier bricht das Programm mit ner AccessViolation ab.
httpRequestThread := TRequestThread.Create('http://www.google.de/');
end;

badenixe63 13. Jan 2009 15:29

Re: Threads
 
gut, jetzt siehts so aus:

Delphi-Quellcode:
implementation

{$R *.dfm}

constructor TRequestThread.Create(url: string);
begin
  myUrl := url;
  myHTTP := TidHTTP.Create(nil);
  inherited Create(false);
end;

procedure TRequestThread.Execute;
var
  f:TextFile;
begin
  AssignFile(f, 'bla.txt');
  Rewrite(f);
  write(f,myHTTP.Get(myUrl));
  CloseFile(f);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 httpRequestThread:TRequestThread;
begin
 httpRequestThread := TRequestThread.Create('http://www.google.de/');
end;

end.
das Programm ist schon voll funktionstüchtig :dancer2: aber wenn ich es per Delphi ausführe gibts es einen EConvertError 'Ungültiges Argument zum Codieren des Datums'

das überrascht mich ein bisschen, wo ich doch garkeine Datumsfunktion verwende


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Seite 1 von 2  1 2      

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