Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TObjectlist.ownsobjects zur Laufzeit anpassen ? (https://www.delphipraxis.net/192480-tobjectlist-ownsobjects-zur-laufzeit-anpassen.html)

bernhard_LA 21. Apr 2017 17:52

TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
ich verwende eine ObjektListe analog zu folgendem kurzen Code Auszug


Delphi-Quellcode:
MyObjList = Class (TObjectList)

.....

constructor Create (data1, data2 : TSameData) ;

...
end;


constructor MyObjList.Create (data1, data2 : TSameData) ;
begin
      ....
     self.ownsobjects := true;
end;

Die Klasse wird in vielen Stellen in unseren Anwendungen verwendet.

In einem bestimmten Falle benötige ownsobjects := false; für eine Instanz dieser Klasse. (die in einem Thread verwendet wird)

Wenn ich den Klassen Konstruktor Anpasse , also auf false setze und mein Programm erzeuge funktioniert die Anwendung.
Wenn ich jetzt in die Anwendung


Delphi-Quellcode:
MyClassInstanz.ownsobject := false;
vor dem Zuweisen der Objectliste zum Thread, bekomme ich keinen Fehler beim Übersetzen aber einen typecast Fehler aus einem Thread heraus.
Kann ich Ownsobject zur Laufzeit nicht beliebig einstellen ?

himitsu 21. Apr 2017 18:28

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Delphi-Quellcode:
MyClassInstanz.ownsobject := false;

Macht rein garnichts, außer die Variable FOwnsObjects in der Objektliste zu ändern.

Thread?
Ich hoffe da greifen nicht mehrere Threads auf diese Liste gleichzeitig drauf zu.


PS: Mit ObjectList.Extract bekommt man Objekte aus der Liste raus, ohne dass sie freigegeben werden, auch wenn OwnsObjects=True ist.

a.def 21. Apr 2017 19:13

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Zitat:

Thread?
Ich hoffe da greifen nicht mehrere Threads auf diese Liste gleichzeitig drauf zu.
Interessehalber: ist lesender Zugriff auf mehreren Threads schädlich?

Klaus01 21. Apr 2017 19:21

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
.. nun wenn Objecte aus der Liste herausgeworfen werden - ist der Zugriff nicht "nur lesend".

Grüße
Klaus

a.def 21. Apr 2017 19:25

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Das sagte ich ja auch nicht :P
Ich fragte nur, ob lesender Zugriff aus mehreren Threads schädlich sei :stupid:

Klaus01 21. Apr 2017 19:50

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Zitat:

Zitat von a.def (Beitrag 1368630)
Das sagte ich ja auch nicht :P
Ich fragte nur, ob lesender Zugriff aus mehreren Threads schädlich sei :stupid:

Ich denke nicht, dass es schädlich ist nur lesend auf die Liste zuzugreifen.

Grüße
Klaus

himitsu 21. Apr 2017 21:43

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Wenn "Lesend" wirklich nur "Lesend" ist
und niemand zur Selben Zeit schreiben könnte,
dann ja.

PS: Aus einem Stream "Lesen" tut auch "Schreiben"
und zwar wird dabei der Positionszeiger verändert.

bernhard_LA 21. Apr 2017 23:56

AW: TObjectlist.ownsobjects zur Laufzeit anpassen ?
 
Zitat:

Thread?
Ich hoffe da greifen nicht mehrere Threads auf diese Liste gleichzeitig drauf zu.

wir haben nur lesenden Zugriff auf diese TObjectlist (MyClass) in den einzelnen Threads;
Ich verstehe nicht warum ich mit ownsobject:= false ein korrekt arbeitendes Programm habe und
wenn ich die Property später im programm Setzte einen Typcast fehler bekomme .


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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