![]() |
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 |
Re: Threads
Ein Thread ist nicht interaktiv, sondern arbeitet im Hintergrund ... also von daher mit "Hello World..." ist da nix ;)
|
Re: Threads
Und mit "Hello Thread" auch nicht (SCNR^^)
|
Re: Threads
|
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 ?? |
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:
Grüße
procedure TForm1.Timer1Timer(Sender: TObject);
var httpRequestThread: THttpRequestThread; begin (sender as TTimer).Enabled:=false; httpRequestThread := THttpRequestThread.create(URLList); end; Klaus |
Re: Threads
Ich hab erstmal nur versucht eine Seite zu kriegen.
Delphi-Quellcode:
delphi kompiliert das Programm fröhlich und wenn man auf den Button drückt kommt die AccessViolation
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. |
Re: Threads
Zitat:
Delphi-Quellcode:
heißen, oder?
myHTTP := TIdHTTP.Create(nil);
|
Re: Threads
...
und das
Delphi-Quellcode:
besser so
var
httpRequestThread:TRequestThread; begin //und endlich gehts los... denkste, hier bricht das Programm mit ner AccessViolation ab. httpRequestThread.Create('http://www.google.de/'); end;
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; |
Re: Threads
gut, jetzt siehts so aus:
Delphi-Quellcode:
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'
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 überrascht mich ein bisschen, wo ich doch garkeine Datumsfunktion verwende |
Re: Threads
und an welcher Stelle gibt es genannten Fehler?
|
Re: Threads
Delphi-Quellcode:
ok, das Problem scheint komischerweise etwas mit google zu tun zu haben. Ich hab mal ein paar andere Webseiten ausprobiert und da tritt kein Fehler auf.
procedure TRequestThread.Execute;
var f:TextFile; begin AssignFile(f, 'bla.txt'); Rewrite(f); write(f,myHTTP.Get(myUrl)); //hier CloseFile(f); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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