Autor Beitrag
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mi 14.02.07 20:58 
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:
ausblenden 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 ?
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type                                 // was gehört hier hinein ?
  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 user profile iconKlabautermann: Topic aus VCL (Visual Component Library) verschoben am Do 15.02.2007 um 10:43
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:

ausblenden 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; // nur mir Synchronize aufrufen da zugriff auf Hauptthread
     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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 user profile iconLuckie empfehlen, das ist wirklich sehr gut:
luckie-online.de/dir...er/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 user profile iconKlabautermann 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.

user profile icong1o2k4 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
  MeinThread1 = class(TThreat)					
TThread mit d nicht TThreat ;-)
@user profile iconKlabautermann: Den Fehler hast du übernommen... ;-)
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 20.02.07 10:50 
Hallo,

user profile icong1o2k4 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