AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstruktor Thread - Frage

Ein Thema von pronny31 · begonnen am 14. Feb 2008 · letzter Beitrag vom 14. Feb 2008
Antwort Antwort
Seite 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 12:42
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.
  Mit Zitat antworten Zitat
pronny31

Registriert seit: 8. Okt 2007
97 Beiträge
 
#12

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 13:29
Mit synchronize kann ich aber nicht innerhalb des Childthreads auf Komponenenten des Formulars zugreifen !
Wie bekomme ich das hin ?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 13:43
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.
  Mit Zitat antworten Zitat
pronny31

Registriert seit: 8. Okt 2007
97 Beiträge
 
#14

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 14:01
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);
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 14:47
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
Jürgen Höfs
  Mit Zitat antworten Zitat
pronny31

Registriert seit: 8. Okt 2007
97 Beiträge
 
#16

Re: Konstruktor Thread - Frage

  Alt 14. Feb 2008, 14:50
Danke ! Es hat funktioniert !
2 Ausrufezeichen in einer Zeile !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz