![]() |
Re: Konstruktor Thread - Frage
Ich sehe hier als Hauptproblem das hier noch so manche Lücken in der objektorientierten Programmierung sind. Grundsätzlich ist das Verständnis noch nicht da, ansonsten hätte sich hier schon so manches Problem geklärt gehabt.
|
Re: Konstruktor Thread - Frage
Mit synchronize kann ich aber nicht innerhalb des Childthreads auf Komponenenten des Formulars zugreifen !
Wie bekomme ich das hin ? |
Re: Konstruktor Thread - Frage
Erstmal: Deine Aufrufezeichen k*tzen mich an. Die lassen deine Beiträge so rüberkommen wie ein bockiges Kind was immer nur haben will...
Zum anderen: wie kommst du zu deiner Aussage? Schonmal die Hilfe zu Synchronize konsultiert? Warum solltest du in der durch Synchronize aufgerufenen Methode nicht auf diese Komponenten zugreifen können? Zeige doch mal deinen bisherigen Code in dem du es versuchst. |
Re: Konstruktor Thread - Frage
Delphi-Quellcode:
unit Unit1;
interface uses Windows,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Db, IBCustomDataSet, IBQuery, IBDatabase; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Label1: TLabel; Label2: TLabel; Panel4: TPanel; Panel5: TPanel; Label3: TLabel; Label4: TLabel; MonthCalendar1: TMonthCalendar; IBDatabase1: TIBDatabase; IBTransaction1: TIBTransaction; IBQuery1: TIBQuery; Button1: TButton; Label5: TLabel; ComboBox1: TComboBox; Label6: TLabel; Label7: TLabel; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type Test = class(TThread) private { Private-Deklarationen } public protected procedure Execute; override; end; var Form1 : TForm1; Test : TestThread; implementation {$R *.DFM} procedure Test.Execute; begin sleep(5000); end; procedure TForm1.FormActivate(Sender: TObject); begin //Hier folgt was wichtiges end; procedure TForm1.Button1Click(Sender: TObject); var datum : TDate; begin datum := MonthCalendar1.Date; // diesen Aufruf würden wir gerne machen Test.create(false,label1,label2,progressbar); end; end. Es geht aber leider nur Test.create(false); |
Re: Konstruktor Thread - Frage
Hallo pronny31,
hier mal grundsätzlich der Ablauf, wie die Daten austauschen kannst zwischen Deinem Thread und der Hauptanwendung: Möchtest du bestimmte Daten schon bei Beginn übergeben, so überschreibe die Methode Create und vergebe dort neue Parameter. Diese übernimmst du noch in der Create-Methode in private Variablen des Threads. Wenn dein Thread nun am arbeiten ist und Daten braucht oder aber auch Daten an die Anwendung geben will, setzt du ein Event, das von der Anwendung aufgenommen wird. Damit der Thread nun nicht weiterarbeitet und evtl. auch auf die visuellen Komponenten zugreift, musst du dieses Event synchronisiert ausgeben, d.h. im Grunde genommen, er wird solange angehalten, bis das Ereignis in der Hauptanwendung abgearbeitet wurde. Du kannst dein Event selbst definieren mit Parametern die du gerne übergeben oder lesen möchtest oder übergibst gleich die Instanz des Threads mit, in Form von "Sender" wie man das z.B. bei den Button-Klicks und vielem anderen hat. Um auf diesen Sender, nämlich deinen Thread, von der Hauptanwendung innerhalb des auszuwertenden Events sinnvoll zugreifen zu können, solltest du bestimmte Eigenschaften des Threads öffentlich machen, d.h. also im "public"-Teil definieren. Hat diese Übergabe oder das Auslesen der Eigenschaften stattgefunden ist die Event-Methode beendet und der Thread bekommt wieder die Möglichkeit weiterzuarbeiten -- nun also wenn gewollt mit den soeben übergebenen Daten. Probiere es mal aus und lese alles mögliche über das Thema, dann wird's schon klappen. Gruß Pfoto |
Re: Konstruktor Thread - Frage
Danke ! Es hat funktioniert !
2 Ausrufezeichen in einer Zeile !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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