AGB  ·  Datenschutz  ·  Impressum  







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

RTTI Attribute verändern

Ein Thema von Neutral General · begonnen am 5. Mai 2014 · letzter Beitrag vom 6. Mai 2014
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.060 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 12:34
Und genau deshalb schrieb ich:
Was nur geht, wenn die lesende Stelle den selben Context verwendet, wie die Schreibende.
Falsch, es gibt intern nur eine Instanz der TRttiPool Klasse, welche durch den TRttiContext record gewrappt wird.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.784 Beiträge
 
Delphi 12 Athens
 
#2

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 12:49
Sicher?

Siehe mein TestCode. (getestet in XE)
Da wird zwei mal "gleichzeitig" eine Instanz des TTest1Attribute erzeugt, nach dem "nochmal", obwohl es davon nur ein Attribut.

Es ändert sich auch nichts, selbst wenn ich nach dem "nochmal" eigene Variablen verwende und die ersten Instanzen nicht überschreibe.
TTest1Attribute ist bei der letzen Abfrage auch wieder False.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Mai 2014 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.060 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 12:59
Sicher?

Siehe mein TestCode. (getestet in XE)
Da wird zwei mal "gleichzeitig" eine Instanz des TTest1Attribute erzeugt, nach dem "nochmal", obwohl es davon nur ein Attribut.
Ja, 100% sicher, ich kenn nämlich den Rtti.pas Source inzwischen fast im Schlaf.

Garantiert wird bei dem Source, den du gepostet hast nicht mehrfach eine Attribut Instanz erzeugt. Außer du hast lokal bei dir noch vor dem "nochmal" einen rtti.Free Aufruf.
Wenn du mir nicht glaubst, dann debug doch durch das TRttiContext.Create .

Oder du liest den Artikel von Barry dazu.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Mai 2014 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.784 Beiträge
 
Delphi 12 Athens
 
#4

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 13:50
Ja, ich war mir auch sicher, daß die RTTI (an vielen Stellen) ein Singleton verwenden und die Daten daher nur einmal vorkommen.
Darum hatte ich auch schon Probleme, wenn man die neue RTTI in Threads verwendet.


Aber, wie du am code siehst, hab ich das Create/Destroy des Attributes quasi geloggt und genau da erkennt man, daß es zwei Mal erstellt wird und nach dem "End" auch zwei Mal freigegeben.
Außerdem ist beim letzen Auslesen der zugewiesene Wert weg (ist ja auch die zeite instanz).
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.060 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 15:49
Aber, wie du am code siehst, hab ich das Create/Destroy des Attributes quasi geloggt und genau da erkennt man, daß es zwei Mal erstellt wird und nach dem "End" auch zwei Mal freigegeben.
Außerdem ist beim letzen Auslesen der zugewiesene Wert weg (ist ja auch die zeite instanz).
Bei mir ebend nich (XE). Da wird das Create nur einmal aufgerufen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.784 Beiträge
 
Delphi 12 Athens
 
#6

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 16:30
Aber XE(1) sollte doch XE(1) sein?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.784 Beiträge
 
Delphi 12 Athens
 
#7

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 17:19
Sehr eigenartig.

Ich hab das jetzt nochmal in einer einzelnen Anwendung getestet und hier im XE3 gibt es nur eine Instanz.
Angehängte Dateien
Dateityp: 7z Project17.7z (2,1 KB, 5x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Mai 2014 um 19:09 Uhr) Grund: weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.060 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 22:52
Sehr eigenartig.

Ich hab das jetzt nochmal in einer einzelnen Anwendung getestet und hier im XE3 gibt es nur eine Instanz.
Und genau diese Anwendung soll unter deinem XE eine andere Ausgabe liefern? Bei mir nicht.
Dann kann das nur an irgendeiner Compileroption liegen, durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.

Wenn du das herausfinden willst debug halt mal mit debug dcus in Zeile 151.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.784 Beiträge
 
Delphi 12 Athens
 
#9

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 22:59
durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.
Im Prinip wäre es ja so eigentlich doch auch richtig?
Das Context-Interface in der Variable sollte ja erst freigegeben werden, bevor das Andere dort rein kommt.

Nja, massig Debuginfos, Eurekalog usw.. Da könnte es sich eventuell doch etwas am Verhalten ändern.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.060 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: RTTI Attribute verändern

  Alt 6. Mai 2014, 23:07
durch die bei der erneuten Zuweisung des Contexts zuerst die Variable gecleared (und somit die TRttiPool Instanz freigegeben) und dann erst das Create aufgerufen wird.
Im Prinip wäre es ja so eigentlich doch auch richtig?
Das Context-Interface in der Variable sollte ja erst freigegeben werden, bevor das Andere dort rein kommt.

Nja, massig Debuginfos, Eurekalog usw.. Da könnte es sich eventuell doch etwas am Verhalten ändern.
Es wird halt erst Create aufgerufen und dann CopyRecord:

Code:
Unit16.pas.151: Rtti := TRttiContext.Create;
004EA99C 8D8514FFFFFF    lea eax,[ebp-$000000ec]
004EA9A2 E8A197FDFF      call TRttiContext.Create
004EA9A7 8D9514FFFFFF    lea edx,[ebp-$000000ec]
004EA9AD 8D45F8           lea eax,[ebp-$08]
004EA9B0 8B0D90754B00     mov ecx,[$004b7590]
004EA9B6 E8B5D5F1FF      call @CopyRecord
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 20:43 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