AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi BeginThread mit Paramater self übergeben.
Thema durchsuchen
Ansicht
Themen-Optionen

BeginThread mit Paramater self übergeben.

Ein Thema von Thomas83 · begonnen am 11. Mär 2008 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:17
hi,

habe eine Klasse und möchte diese gerne bei BeginThread mit als pointer übergeben.
Wie kann ich dann in der Thread Procedure drauf zugreifen?
Delphi-Quellcode:
TMyClass = class
private
  procedure ....
public
  procedure irgendwas;
  procedure test;
end;

...

function MeinThread(p : Pointer) : integer;
var
  pMyClass : ^TMyClass;
begin
  pMyClass := p;
  pMyClass^.irgendwas; //<- fehler, Zugriffsverletzung
end;

...

procedure TMyClass.test;
begin
  BeginThread(nil,0,@MeinThread, @self, 0, ThreadId);
end;
müste doch so funktionieren, oder?
bekomme immer einen fehler.....
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:21
Zitat von Thomas83:
bekomme immer einen fehler.....

Was für einen Fehler und wo?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#3

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:25
ok wurde geändert.....
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:30
eine Objectinstanz ist bereits ein pointer. Wenn du dir die Adresse von Self holst bekommst du eine Adresse vom Stack (wo der unsichtbare Self-Pointer liegt). Übergebe direkt Self (gegebenfalls einfach nach Pointer casten)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:35
Du kannst auch die Thread-Funktion zu einer Methode deiner Klasse machen: http://www.michael-puff.de/Artikel/2...backMethod.php Ist meiner Meinung nach eleganter.

Aber wo hast du jetzt was geändert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:36
er hat im quelltext einen kommentaar dahinter gemacht mit dem Fehler.
@luckie: Dein Code macht aber auch nichts anderes als diese globale Funktion zu erzeugen (nur das sie dann nicht deutlich lesbar im Quelltext steht) und darin wird dann eine methode aufgerufen. Das kann er ja auch machen in dem er es selbst durchleitet (was er ja vor hat)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#7

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 14:46
da ich kein assembler lesen kann weis auch nicht was diese methode genau macht.

habe self jetzt ohne @ übergeben,
bekomme jedoch weiterhin eine EAccessViolation.......
in dieser Threadmethode möchte ich mit TidTcpClient die daten auslesen. Und bei ReadBuffer puff.....
kann aber auch nicht vom pointer den port oder so auslesen. irgend was bei der übergabe läuft schief.....
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 15:11
Zitat von SirThornberry:
er hat im quelltext einen kommentaar dahinter gemacht mit dem Fehler.
@luckie: Dein Code macht aber auch nichts anderes als diese globale Funktion zu erzeugen (nur das sie dann nicht deutlich lesbar im Quelltext steht) und darin wird dann eine methode aufgerufen. Das kann er ja auch machen in dem er es selbst durchleitet (was er ja vor hat)
Nein, mit meinem Code kann er seine Thread-Funktion zu einer Methode seiner Klasse machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
andreash

Registriert seit: 22. Jun 2006
Ort: Dörverden
60 Beiträge
 
Delphi 7 Professional
 
#9

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 15:14
Man schaue sich doch mal den Quelltext zu TThread an. Dort wird auch das Objekt an die Threadfunktion weitergegeben.
Andreas
Der Optimist glaubt, wir leben in der besten aller möglichen Welten. Der Pessimist befürchtet, daß das stimmt.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#10

Re: BeginThread mit Paramater self übergeben.

  Alt 11. Mär 2008, 15:32
Zitat von andreash:
Man schaue sich doch mal den Quelltext zu TThread an. Dort wird auch das Objekt an die Threadfunktion weitergegeben.
wo?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:45 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