![]() |
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. :( |
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 |
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; |
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:
Überdenke nur die Problematik, dass womöglich
procedure TTest.StartTest;
begin ftestthread := Ttestthread.create(self); end; 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