Entwickler-Ecke
Sonstiges (Delphi) - Threads
Andre :-) - Sa 08.02.03 00:48
Titel: Threads
Hi,
unter Java kein Prob, nur wie kann ich hier ein Thread aufmachen
und dann auch nutzen?
Danke
Andre
DaRkFiRe - Sa 08.02.03 16:14
Hi André. Du musst für jeden Thread, der eine andere Aufgabe erledigen soll, eine eigene Klasse erstellen...
Eine Beispiel Unit sähe dann so aus (noch nicht gespeichert - einfach mit dem Quelltext der neuen Anwendungs-Unit ersetzen). Sie wartet nach dem Start (der Anwendung [!!!], da im OnCreate der Form der Thread erstellt wird) 3 Sekunden lang und gibt dann die Nachricht aus. Wenn man bestätigt, ist die Execute-Prozedur des Threads beendet und der Thread terminiert...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type TWorkThread = class(TThread) public procedure Execute; override; end; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;
var Form1: TForm1; WT:TWorkThread; implementation
procedure TWorkThread.Execute; var lTick:LONGINT; begin //der Thread-Code hier - in diesem Beispiel wartet der Thread 3 Sekunden lang und gibt dann eine Nachricht aus lTick:=GetTickCount; repeat Application.ProcessMessages until (GetTickCount-lTick > 3000) OR Terminated; ShowMessage('3 Sekunden sind um!'); end;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin WT:=TWorkThread.Create(False); //False -> gleich mit der Abarbeitung loslegen
end;
end. |
OregonGhost - Sa 08.02.03 18:32
Wenn du für deinen Thread keine Klasse definieren (oder ohne VCL arbeiten, denn wir sind ja in der nonVCL-Sparte) willst, kannst du stattdessen auch die API-Funktion CreateThread verwenden.
Delete - Sa 08.02.03 18:36
Damit komme ich übrigens besser klar als das mit der VCL.
AndyB - Sa 08.02.03 18:54
| OregonGhost hat folgendes geschrieben: |
| oder ohne VCL arbeiten, denn wir sind ja in der nonVCL-Sparte |
Und was hat nonRTLx mit nonVCL zu tun? Die Classes-Unit gehört nicht zur VCL sondern zur erweiterten RTL, wie auch die SysUtils Unit.
Das nur mal um die Begriffe klar zu definieren.
DaRkFiRe - Sa 08.02.03 19:03
Danke AndyB: das meine ich nämlich auch: Klasse ist nicht gleich VCL. Schließlich heißt es ja "VISUAL" Component Library - und ich weiß beim besten nicht, wo die TThread-Klasse visuell ist :/
Ach übrigens kapselt die TThread-Klasse auch nur die WinAPI.
Andre :-) - Sa 08.02.03 22:38
Hi,
vielen Dank für die Antworten, aber könntet Ihr mir vielleicht anhand eines Bsp. einen Thread erklären, den ich innerhalb meiner bestehenden Form nutzen kann.
Irgendwie dass ich zum Bsp. für einen Donwload einen eigenen Thread aufmachen kann. Sodass ich den Thread auch wieder killen kann?
Hintergrund ist ein FTP Tool, welches ich leider mit der NMFTP Komponente geschrieben habe. ( Ich komme mit der INDI nicht aufm Server ?!?!? ) Und ich nun das Problem mit dem Abort lösen muss, welches ja anscheinend echte Probleme bei der o.g. Komponente macht.
Also, könntet Ihr mir kurz erleutern, wie ich einen neuen THREAD innerhalb ein Procedure starte?
DANKE DANKE DANKE
Delete - Sa 08.02.03 22:46
Na ja ein Beispiel wäre SortIt oder der Internet-Monitor von meiner HP, allerdings wäre das ohne die Thread-Klasse, also reine WinAPI.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!