Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Prüfen ob TStrings gerade geupdated wird

  Alt 8. Feb 2010, 11:12
Ich wollte kein neues Thema aufmachen, da die Überschrift m.E. wie die sprichwörtliche Faust aufs Auge passt:

Ich benutze eine TStringList in einer Unit, um sie von meinem Hauptprogramm mit Dateinamen zu bestücken. Dann reagiere ich auf das Ereichnis OnChange und verarbeite die Dateinamen. Das funktioniert soweit super.

Nur sehe ich leider mehrere Probleme.
Innerhalb meiner Ereignisbehandlungsroutine gehe ich alle Einträge mittels
Delphi-Quellcode:
While Count > 0 Do
Begin
  S:=Strings[0];
  If S = ...
  // Verarbeiten der Einträge
  Delete(0);
End;
durch.
Wenn nun während der Verarbeitung weitere Einträge in der Liste hinzukommen, dann werden die mit abgearbeitet, weil dann Count wieder erhöht wird. Es wäre dann sinnlos und problematisch, wenn sich dann 2 Instanzen der Ereignisbehandlungsroutine in die Quere kämen. Meine Idee sah dann zunächst so aus:
Delphi-Quellcode:
If Laueft Then Exit; // nur eine Instanz laufen lassen
Laeuft:=True;
While Count > 0 Do
Begin
  S:=Strings[0];
  If S = ...
  // Verarbeiten der Einträge
  Delete(0);
End;
Laeuft:=False;
Aber ich hätte dann ein Problem, wenn meine Ereignisbehandlung exakt zwischen dem End; und dem Laeuft:=False; steht, während weitere Einträge hinzukommen. Der erneute Aufruf würde wegen des Zustandes von Laeuft sofort beendet (Then Exit, meine neuen Einträge werden aber nicht mehr abgearbeitet, weil While Count > 0 Do ... schon vollständig beendet war.
Ich hoffe, Ihr könnte mein Problem nachvollziehen.

Case Nachvollziehen Of
Nein : Bitte nachfragen;
Ja : Wie kann ich das Dilemma lösen?
End;

Danke, Alex
Alex Winzer
  Mit Zitat antworten Zitat