AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Parameterübergabe bei BeginThread für Klassenmethode
Thema durchsuchen
Ansicht
Themen-Optionen

Parameterübergabe bei BeginThread für Klassenmethode

Ein Thema von s.h.a.r.k · begonnen am 2. Jul 2010 · letzter Beitrag vom 5. Jul 2010
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Parameterübergabe bei BeginThread für Klassenmethode

  Alt 2. Jul 2010, 01:34
Ich habe im Moment eine threoretische Fragen, bei der ich nicht ganz verstehe, warum es denn nicht klappt. Und zwar kann ich via BeginThread() ja den Code einer Procedure als Thread ausführen -- das ganze klappt auch wunderbar mit einer Klassenmethode. Nun wollte ich auf Self als Parameter übergeben, was ich auch via [delphi]Pointer(Self)[/delphi) getan habe.

Wenn ich nun eine Klassenmethode via BeginThread ausführe, so bekomme ich es nicht gebacken, Self über den Parameter zu erhalten. Habe ich statt dessen eine (globale) Procedure als Thread-Code, so funktioniert die Übergabe von Self ohne Probleme. Nur warum ist das so? Ich habe in einem Post vorher gelesen, dass das nur so klappt, nur stand da leider keinerlei Begründung.

Hier nochmal etwas Code:
Delphi-Quellcode:
type
TTest = class(TObject)
private
  FThreadHandle : Integer;
  FThreadID : Cardinal;
public
  procedure StartIt();
  procedure ThreadedMethod(Instance: TTest);
end;

procedure ThreadedProcedure(Instance: TTest);

implementation

// --- here the global procedure ---
procedure ThreadedProcedure(Instance: TTest);
begin
  //
  // < ------- Instance = Self parameter
  //
end;

// --- here the class methods ---
procedure TTest.StartIt();
begin
  // i know, i overwrite the handle and id ;)
  FThreadHandle := BeginThread(nil, 0, @ThreadedProcedure, Pointer(Self), 0, FThreadID);
  FThreadHandle := BeginThread(nil, 0, @TTest.ThreadedMethod, Pointer(Self), 0, FThreadID);
end;

procedure TTest.ThreadedMethod(Instance: TTest);
begin
  //
  // < ------- Instance <> Self parameter
  //
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
 


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 15:28 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