Einzelnen Beitrag anzeigen

Megamorph

Registriert seit: 28. Dez 2005
25 Beiträge
 
#14

Re: Problem mit Thread in der Klasse

  Alt 27. Dez 2008, 18:32
@Uwe Raabe: Es funktioniert tatsächlich auf diese Weise, vielen Dank!

Wenn man sich das ganze im Speicher anschaut, ist es auch logisch, weil die Delphi-Bezeichner für die Variablen der Klasse eine Art Pointer-Gerüst darstellen, welches sich relativ vom Klassennamen aufbaut. Wenn man nun BeginThread ohne weitere Parameter aufruft, wird bei der Pointerberechnung 00000000 + <relative Adresse> gerechnet, was natürlich Quatsch ist, weil wir dann sonstwo im Speicher rauskommen, aber nicht in unserer Klasse. Vielen Dank nochmals.

@alzaimar: Methoden (Funktionen/Proceduren die Member einer Klasse sind), sind selbstverständlich in der Lage, auf Variablen dieser Klasse zuzugreifen, weil die Methoden mit Instanziert werden. Ein kleines Bsp:

Delphi-Quellcode:
type
  TMeineKlasse = class
    private
      iMeineVariable : Integer;
    public
      function iMeineMethode(iParameter:Integer;):Integer;
  end;

//...

function TMeineKlasse.iMeineMethode(iParameter:Integer;):Integer;
begin
  Result:= iMeineVariable + iParameter;
end;
Das ist ohne Probleme compilierbar.
Zu verwenden auf folgende Art und Weise:

Delphi-Quellcode:
var
  MeinObjekt : TMeineKlasse;
  ausgabe : Integer;
//...
  MeinObjekt:= TMeineKlasse.Create;
  MeinObjekt.iMeineVariable:= 5;
  ausgabe:= MeinObjekt.iMeineMethode(5);
//ausgabe ist nun 10
Da es jetzt nur handgeschrieben ist, verzeiht mir bitte Syntaxfehler. Wenn jedoch systematische oder logische Fehler enthalten sind, weißt mich darauf hin. (-;

MfG Mega.

edit: Nochmal fix zur Erklärung: Der Crash beim Threadaufruf kam, weil die Speicheradresse falsch kalkuliert wurde.
  Mit Zitat antworten Zitat