AGB  ·  Datenschutz  ·  Impressum  







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

lokale variable in finalization?

Ein Thema von DGL-luke · begonnen am 20. Jul 2006 · letzter Beitrag vom 20. Jul 2006
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

lokale variable in finalization?

  Alt 20. Jul 2006, 16:07
hallo,

in einer unit mit threads nutze ich unit-globale critical sections für den dateizugriff. die werden bei finalization freigegeben:

Delphi-Quellcode:
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
"i" habe ich auch global deklariert, und delphi meckert:
Zitat:
[Pascal Warnung] ULogThreads.pas(178): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein
wie macht man das "elegant"?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 16:21
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 16:25
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 16:37
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 17:06
Zitat von himitsu:
oder (ist zwar langsamer), aber wenn es gewünscht wird....
Viel zu langsam. Du lässt ihn mit jedem Dateinamen noch extra wieder die Liste verschieben. Dann lieber so:

Delphi-Quellcode:
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.
[/quote]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 17:12
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


[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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: lokale variable in finalization?

  Alt 20. Jul 2006, 17:22
Zitat von himitsu:
CriticalSections machst du doch per SectionsAccess threadsicher?
Ja. *stolz ist*
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  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 04:50 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