AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Zugriff auf Private Variablen

Ein Thema von Purri · begonnen am 25. Okt 2017 · letzter Beitrag vom 26. Okt 2017
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 09:40
Setze mal einen Haltepunkt bei

Delphi-Quellcode:
procedure TTestThread.RemoveThread;
begin
  gThreadManager.RemoveThread(Self)
end;
und denk mal nach
  Mit Zitat antworten Zitat
Purri

Registriert seit: 18. Nov 2010
13 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 09:54
Hallo Günther,

ich sehe da leider kein Problem (Außer vll. das fehlende Semikolon, aber das macht keinen Unterschied ).

Wenn ich den Thread alleine beende, also per Klick auf den Thread-Stop-Button, funktioniert übrigens alles, auch das RemoveThread.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 10:34
Du übergibst in dem Thread Self an den Threadmanager und versuchst den zu Löschen (Free). Das kann nur schief gehen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 10:35
Dein gThreadManager ist zu dem Zeitpunkt schon nil da du vorher schon FreeAndNil(gThreadManager) gemacht hast.
  Mit Zitat antworten Zitat
Purri

Registriert seit: 18. Nov 2010
13 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 10:45
Ok, ich verstehe was ihr meint, aber nicht warum das so ist.

Ich habe jetzt das FreeAndNil durch
Delphi-Quellcode:
  gThreadManager.Free;
  gThreadManager := nil;
ersetzt. nun klappt es.

Danke.

Zum Verständnis:
Ich befinde mich doch eigentlich immer noch im Destructor vom ThreadManager, also dürfte er doch nicht schon weg sein? Ein Blick in den FreeAndNil-Code zeigt: Zuerst wird := nil gesetzt und erst danach .Free aufgerufen.... Ich fühle mich von Delphi verar**** So isses doch wohl eher NilAndFree

Gibt es einen guten Grund, warum diese Reihenfolge ausgeführt wird?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 11:04
Deine Instanz des ThreadManager existiert zu diesem Zeitpunkt noch. Nur der globale Zeiger "gThreadManager" auf diese Intstanz zeigt bereits auf nil. Zugriffe über nil-Pointer löst Zugriffsverletzung aus.
  Mit Zitat antworten Zitat
Purri

Registriert seit: 18. Nov 2010
13 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 11:08
Danke Blub,
das habe ich verstanden und schon geändert. Ich frage mich nur noch, warum FreeAndNil zuerst den Zeiger löscht und dann die Instanz, anstatt es andersrum zu machen, wie ja auch der Name es vermuten lässt.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Kein Zugriff auf Private Variablen

  Alt 25. Okt 2017, 11:35
Zu dem Sinn und Unsinn von FreeAndNil gibt es dutzende Diskussionen. Einige sagen, man sollte es oft verwenden, andere nie. Und ich glaube beide haben Recht
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:02 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