Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - TThread starten, was für parameter müssen enthalten sein ?
g1o2k4 - Mi 14.02.07 20:58
Titel: TThread starten, was für parameter müssen enthalten sein ?
hallo
ich versuche grad das prinzip von threads zu verstehen, aber ich hab ein paar begriffliche schwierigkeiten ?
im hauptprozess der delphi vcl anwendung definiere ich den thread als eine neue klasse. was muss ich bei "TThread.Create();" für parameter angeben ?
ich hätte gern dass ein thread in ein Memo der Form1 eine Zeile hinzufügt.
also:
Delphi-Quelltext
1:
| Form1.Memo1.Lines.Add(); |
wo muss ich dazu die prozedur deklarieren ?
könntet ihr ein beispiel schrieben ? einfach in folgendes quelltextgerüst die nötigen zeilen für thread und diese schreib prozedur schreiben ?
Delphi-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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) private public end;
type MeinThread1 = class(TThreat) private public
protected
end;
var Form1: TForm1;
implementation
{$R *.dfm}
end. |
die meisten beispiele die ich im netz gefunden habe, waren zu komplex als dass man erkennen könnte was jetzt für den thread wichtig ist...
Moderiert von
Klabautermann: Topic aus VCL (Visual Component Library) verschoben am Do 15.02.2007 um 10:43
Klabautermann - Do 15.02.07 11:56
Hallo,
ein Thread der nur etwas ausgeben soll ist nicht besonders effektiv. Denn um etwas im Hauptformular aus zu geben musst du deinen Thread mit den Hauptthread deines Programmes wieder Syncronisieren.
Das Ganze machst du dann so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type MeinThread1 = class(TThreat) protected procedure Ausgabe; procedure Execute; override; public end;
procedure MeinThread1.Ausgabe; begin Form1.Memo1.Lines.Add('Text'); end;
procedure MeinThread1.Execute; begin Synchronize(Ausgabe); end; |
Die Procedure Execute besitzt die Besonderheit, dass sie automatisch aufgerufen wird, wenn du beim erzeugen des Threads False als Parameter angibst:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var aThread : MeinThread1; begin aThread := MeinThread1.Create(false); end; |
Ich hoffe damit konnte ich ein wenig helfen.
Gruß
Klabautermann
jaenicke - Do 15.02.07 12:30
Und wenn du etwas über die Hintergründe von Threads und deren Verwendung wissen willst, dann kann ich dir dieses Tutorial von
Luckie empfehlen, das ist wirklich sehr gut:
http://luckie-online.de/dirindex.php?folder=Developer/Delphi/Tutorials/
In der Zip-Datei (Threads_mit_Delphi.zip) sind neben der PDF auch Demos dabei.
Und im letzten Kapitel 8 ab Seite 41 gehts um das VCL-Threadobjekt, das du ja auch benutzen willst. (Ein Beispiel hast du ja von
Klabautermann schon.)
Insgesamt sieht das ganze Thema zwar erstmal kompliziert aus (jetzt nicht was TThread angeht ;-)), aber Michael hat das wirklich gut erklärt, du müsstest dir nur etwas Zeit nehmen, damit du das alles verstehst.
g1o2k4 hat folgendes geschrieben: |
Delphi-Quelltext 1:
| MeinThread1 = class(TThreat) | |
TThread mit d nicht TThreat ;-)
@
Klabautermann: Den Fehler hast du übernommen... ;-)
g1o2k4 - Fr 16.02.07 16:59
danke.
werd ich mir mal durchlesen wenn ich zeit hab...
@Klabautermann: danke für das beispiel, aber wo wird der thread denn erzeugt ? wo muss das MeinThread1.Create(); hin ? und mit welchen angaben ?
Klabautermann - Di 20.02.07 10:50
Hallo,
g1o2k4 hat folgendes geschrieben: |
@Klabautermann: danke für das beispiel, aber wo wird der thread denn erzeugt ? wo muss das MeinThread1.Create(); hin ? und mit welchen angaben ? |
sorry, habe die rückfrage jetzt erst gesehen. Das
MeinThread1.Create() kommt da hin, wo du den Thread starten möchtest.
Gruß
Klabautermann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!