![]() |
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:
müste doch so funktionieren, oder?
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; bekomme immer einen fehler..... |
Re: BeginThread mit Paramater self übergeben.
Zitat:
Was für einen Fehler und wo? |
Re: BeginThread mit Paramater self übergeben.
ok wurde geändert.....
|
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)
|
Re: BeginThread mit Paramater self übergeben.
Du kannst auch die Thread-Funktion zu einer Methode deiner Klasse machen:
![]() Aber wo hast du jetzt was geändert? |
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) |
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..... |
Re: BeginThread mit Paramater self übergeben.
Zitat:
|
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.
|
Re: BeginThread mit Paramater self übergeben.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 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