Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread und Objekt (https://www.delphipraxis.net/103783-thread-und-objekt.html)

Telefonkabel 21. Nov 2007 18:40


Thread und Objekt
 
Hy!
Ich hab mla wieder ein Problem und zwar folgendes:
Es existiert eine Klasse TTestThread und eine Klasse TTest.
Ein Objekt TTest HAT ein Objekt der Klasse TTestThread.
Wenn ich nun einen Methode von TTest aufrufe, soll der dazugehörige Thread erstellt werden
und soll dann eine Methode des zu dem Thread gehörigen TTest-Objektes aufrufen.
Wie kann ich möglichst sauber realisieren?


Wäre super, wenn ihr mir helfne könntet, stehe hier voll auf dem Schlauch. :(

Pfoto 21. Nov 2007 19:07

Re: Thread und Objekt
 
Hallo Telefonkabel!

ich würde es vielleicht so machen (Pseudocode):


Delphi-Quellcode:
TTest = class; // forward

TTestThread = class(TThread)
private
  fTest: TTest;
protected
  procedure Execute; override;
public
  constructor Create(Test: TTest);
end;


TTest = class
private
  fTestThread: TTestThread;
  procedure StartedFromThread;
public
  procedure StartTest;

end;


implementation;


procedure TTestThread.Create(Test: TTest);
begin
  fTest:= Test;
end;


procedure TTestThread.Execute;
begin
  fTest.StartedFromThread;
end;

In der Methode "StartTest" könntest du den Thread
erstellen und ihm dabei das Objekt "TTest" übergeben.

Der Thread kennt dann die Methode "StartedFromThread",
in der du den gewünschten Code platzieren könntest.


Gruß
Pfoto

Telefonkabel 21. Nov 2007 19:15

Re: Thread und Objekt
 
Ja, aber wie mache ich das?
Ich rufe von meinem Hauptprogramm die Prozedur StartTest auf und wenn ich da drin dann den Thread createn will, weiß er doch trotzdem nicht welches Objekt er ist, oder?
Es müsste dann doch so aussehen:

Delphi-Quellcode:
procedure TTest.StartTest;
begin
   ftestthread := Ttestthread.create(??????Was kommt dann hier rein??????)
end;

Pfoto 21. Nov 2007 19:18

Re: Thread und Objekt
 
Mit "Self" übergibst du praktisch das Objekt,
in dem du dich gerade befindest.

Also müsste es so gehen:

Delphi-Quellcode:
procedure TTest.StartTest;
begin
  ftestthread := Ttestthread.create(self);
end;
Überdenke nur die Problematik, dass womöglich
unkontrolliert beliebig oft die Methode "StartTest"
aufgerufen werden könnte.
Das geht dann natürlich nicht gut...

Gruß
Pfoto


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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