Zitat von
easywk:
Hi.
Wenn du das leeren und Befüllen eh schon mit einer Semaphore geschützt hast, kann du dir an der Stelle doch einen Merker setzen, dass geändert worden ist. Der Thread setzt diesen Merker zurück, wenn er anfängt zu arbeiten und fragt ihn vor jedem Schleifenzugriff ab. Sitzt der Merker wieder, schießt sich der Thread selber ab ...
Delphi-Quellcode:
procedure TXXXThread.Execute;
begin
Geaendert:=FALSE;
for i:=0 to liste.Count-1 do
begin
if Geaendert then Exit;
BearbeiteListenElement(i);
end;
end;
cu
easywk
So mach ich das jetzt, aber leider hab' ich da noch ein kleines Problem: Wenn ich das Programm beende, setze ich das Flag einfach präventiv im Destruktor des Objekts, das den Thread erstellt hat, so dass ein eventuell noch laufender Thread sich beenden kann. Leider bekommt aber der Thread wieder keine Chance, auf das Flag zu reagieren, weshalb mir FastMem am Ende ein Speicherleck um die Ohren haut. Damit bin ich wieder bei meinem Originalproblem.
Gruß
xaromz