Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Problem mit Thread in der Klasse

  Alt 27. Dez 2008, 11:45
Ah, Luckie. Hups.

Siehst du, man sieht den Wald vor lauter Bäumen nicht. Du hast eine Klasse deklariert und übergibst einen Methodenzeiger. Obwohl, nee. Das ist gar kein Methodenzeiger, denn da ist ja kein Objekt instantiiert. Innerhalb der Methode greifst Du aber auf eine private Variable der Klasse zu. Ohne Objekt geht das immer in die Hose.

Also nochmal:
Delphi-Quellcode:
Type
  TMyThread = Class (TThread)
    fmyObject : TWhatever;
  protected
    Procedure Execute; Override;
  Public
    Constructor Create (aMyObject : TWhatever);
  End;


Constructor TMyThread.Create (aMyObject : TWhatever);
Begin
  Inherited Create(True); // noch nicht loslaufen;
  fMyObject := aMyObject;
  Resume; // Und ab
End;

Procuedre TMyThread.Execute;
Var
  anotherObject : TMyObject;

Begin
  anotherObject := TMyObject.Create;
  Try
    While Not Terminated Do Begin
      DoSomething (fMyObject);
      DoSomethingElse (anotherObject);
    End
  Finally
    anotherObject.Free;
  End;
End;

...
Begin
  MyObject := TMyObject.Create;
  MyThread := TMyThread.Create (MyObject);
...
  MyThread.Terminate;
  MyThread.WaitFor;
  FreeAndNil (MyThread);
Zitat von Megamorph:
... aber wie soll ich in der TWorkThread.Execute auf Klassenelemente von TXxxxxxx zugreifen (vermutet nichts Falsches hinter der Klasse, ich habe sie nur unkenntlich gemacht).
Bist Du sicher, Du weisst, was (Delphi)Klassen sind bzw. wie man damit arbeitet? Oder ist das nur die übliche Betriebsblindheit? Du musst ein Objekt instantiieren, um auf Klassenelemente zugreifen zu können (Ausnahme: statische Klassenmethoden und statische Klasseneigenschaften).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat