![]() |
lokale variable in finalization?
hallo,
in einer unit mit threads nutze ich unit-globale critical sections für den dateizugriff. die werden bei finalization freigegeben:
Delphi-Quellcode:
"i" habe ich auch global deklariert, und delphi meckert:
initialization
CriticalSections := TStringList.Create; SectionsAccess := TCriticalSection.Create; finalization for i := 0 to CriticalSections.Count - 1 do begin CriticalSections.Objects[i].Free; end; CriticalSections.Free; SectionsAccess.Free; en Zitat:
|
Re: lokale variable in finalization?
1. Leg dir eine Procudure dafür an, die du einfach aufrufst - die Procedure kann dann eine lokale Variable haben.
2. Warum TStringList? Sicher dass du keine TObjectList nutzen willst? |
Re: lokale variable in finalization?
oder (ist zwar langsamer), aber wenn es gewünscht wird....
Delphi-Quellcode:
initialization
SectionsAccess := TCriticalSection.Create; CriticalSections := TStringList.Create; finalization while CriticalSections.Count > 0 do begin CriticalSections.Objects[0].Free; CriticalSections.Delete(0); // ich hoffe das Delete stimmt, aber wenn nicht ... // es sollte klar sein, was gemeint ist ._. end; CriticalSections.Free; SectionsAccess.Free; end. |
Re: lokale variable in finalization?
Also elegant sieht das nicht aus, himitsu...
@Muetze1: Naja, sind critical sections für dateischreibaktionen. Alle Dateien, in denen ich schon mal was gemacht hab, stehen in der stringlist, und im object die dazugehörige TCriticalSection. Also if Index(filename) = -1 neuen eintrag anlegen, ansonsten den verwenden, der zurückkommt. Ich werd das mit der procedure wohl machen, sobald ich dazu komme. Gibt es irgendwelche echten Gegenindikationen gegen die benutzung der globalen Variablen i(also was, wos irgendwann knallt)? ich nehm sie ja sonst nirgends her. |
Re: lokale variable in finalization?
Zitat:
Delphi-Quellcode:
[/quote]
initialization
SectionsAccess := TCriticalSection.Create; CriticalSections := TStringList.Create; finalization while CriticalSections.Count > 0 do begin CriticalSections.Objects[Pred(CriticalSections.Count)].Free; CriticalSections.Delete(Pred(CriticalSections.Count)); end; CriticalSections.Free; SectionsAccess.Free; end. |
Re: lokale variable in finalization?
och, dann doch lieber wieder mit der Schleife und ohne zwischendurch zu löschen ... es gibt nicht nur For-Schleifchen ... und du willst nicht wissen, was man noch als lokale Variable misbrauchen kann :roll:
[add] zum thema: CriticalSections machst du doch per SectionsAccess threadsicher? dann sollte es wohl keine Probleme geben (die beiden variablen hast du ja bestimmt in implementation deklariert, also nur Unit-global? |
Re: lokale variable in finalization?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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