Mit lkVCDxRip.exe wird eine SVCD gerippt/ein SVCD-Image extrahiert. Anschließend werden mit folgendem Quelltext aus der
XML die Kapitelzeiten ausgelesen und in einer Textdatei gespeichert.
Delphi-Quellcode:
sl := TStringList.Create;
// Stringlist für das XML
kl := TStringList.Create;
// Stringlist für die Kapitelzeiten
sl.LoadFromFile(
xml);
// Laden der XML
for i := 0
to sl.Count - 1
do // Suchen der Tags mit den Kapitelzeiten
if pos ('
entry id=', sl.Strings[i]) > 0
then begin
von := pos ('
>', sl.Strings[i]);
// Ende des Anfang-Tags
bis := pos ('
</', sl.Strings[i]);
// Anfang des Ende-Tags
if bis > von
then begin
kap := copy(sl.Strings[i], von + 1, bis - von - 4);
// Zeit in Kapitelliste kopieren
kl.Add (kap);
end;
end;
sl :=
NIL;
// Stringlist des XML freigeben
sl.Free;
if kl.Count > 0
// Punkt gegen Komma austaschen und den Wert Null entfernen
then begin
i := 0;
while i < kl.Count
do begin
kap := Tausch(kl.Strings[i], '
.', '
,' ,false, true);
kl.Strings[i] := kap;
if StrToFloat(kap) = 0
then kl.Delete(i)
else inc(i);
end;
end;
if kl.Count > 0
// Zeitformat ändern
then begin
for i := 0
to kl.Count - 1
do begin
kap := kl.Strings[i];
kl.Strings[i] := FormatSecS(kap);
// Funktion in einer anderen Unit
end;
end;
if kl.Count > 0
// Die Kapitelliste speichern
then begin
kap := (ChangeFileExt(Ziel, '
.Kapitel'));
// Ziel ist die *.mpg von der SVCD
kl.SaveToFile(kap);
end;
while not FileExists(kap)
do sleep(50)
kl :=
NIL;
// Kapitelliste freigeben
kl.Free;
Beim Freigeben der Kapitelliste (kl.free) gibt es eine Schutzverletzung. Durch die Abfrage, ob die Kapiteldatei angelegt wurde, hat sich die Wahrscheinlichkeit, dass die Schutzverletzung auftritt, verringert. Wenn ich noch ein 'Sleep(1000);' verwende, tritt bei mir die Schutzverletzung nicht mehr auf. Allerdings bei anderen Anwendern.
Kann mir jemand erklären, warum an dieser Stelle eine Schutzverletzung auftritt und ob es eine bessere Lösung als ein Sleep gibt?