Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi BeginThread mit Paramater self übergeben. (https://www.delphipraxis.net/110005-beginthread-mit-paramater-self-uebergeben.html)

Thomas83 11. Mär 2008 14:17


BeginThread mit Paramater self übergeben.
 
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.....

Luckie 11. Mär 2008 14:21

Re: BeginThread mit Paramater self übergeben.
 
Zitat:

Zitat von Thomas83
bekomme immer einen fehler.....

:roll:
Was für einen Fehler und wo?

Thomas83 11. Mär 2008 14:25

Re: BeginThread mit Paramater self übergeben.
 
ok wurde geändert.....

SirThornberry 11. Mär 2008 14:30

Re: BeginThread mit Paramater self übergeben.
 
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)

Luckie 11. Mär 2008 14:35

Re: BeginThread mit Paramater self übergeben.
 
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?

SirThornberry 11. Mär 2008 14:36

Re: BeginThread mit Paramater self übergeben.
 
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)

Thomas83 11. Mär 2008 14:46

Re: BeginThread mit Paramater self übergeben.
 
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.....

Luckie 11. Mär 2008 15:11

Re: BeginThread mit Paramater self übergeben.
 
Zitat:

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.

andreash 11. Mär 2008 15:14

Re: BeginThread mit Paramater self übergeben.
 
Man schaue sich doch mal den Quelltext zu TThread an. Dort wird auch das Objekt an die Threadfunktion weitergegeben.

Thomas83 11. Mär 2008 15:32

Re: BeginThread mit Paramater self übergeben.
 
Zitat:

Zitat von andreash
Man schaue sich doch mal den Quelltext zu TThread an. Dort wird auch das Objekt an die Threadfunktion weitergegeben.

wo?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.
Seite 1 von 2  1 2      

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