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).