wahrscheinlich schon zig mal gefragt, gefunden hab ich aber nichts. Wenn schon gelöst, reicht mir ein Link.
Mein Problem: Ich erzeuge viele Kreise, die als Liste verwaltet werden:
Code: Alles auswählen
TKreis = class (TShape)
public RtgX, RtgY, Groesse : integer;
public next: TKreis;
procedure bewegen;
constructor create (AOwner: TComponent); override;
procedure setGroessePosition(inX, inY, inGroesse: integer);
procedure MouseDown (Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;
TListe = class
erster : TKreis;
procedure hinzufuegen (inK: TKreis);
procedure loesche (inK: TKreis);
end;
Wie beim alten "Asteroids" teilen sich die Kreise beim Draufklicken, werden kleiner, die Klone werden in die Liste eingefügt und nach 3 Klicks wird der entsprechende Kreis gelöscht (aus der Datenstruktur entfernt).
Über einen Timer wird die Liste mit einer Schleife durchlaufen, in der die Kreis bewegt werden.
Nun kommt es bei schnellen Klicks und ca. 50-100 Kreisen wohl dazu, dass "gleichzeitig / nebenläufig" ein Kreis gelöscht und die Liste zum Bewegen der Kreise im Timer durchlaufen wird.
Dabei greift die Schleife im Timer wohl auf schon gelöschte Objekte zu und es gibt den SIGSEGV.
Frage: Gibt es die Möglichkeit, die "Nebenläufigkeit" der Prozesse einzuschränken, dass nur gelöscht wird, wenn die Bewegen-Schleife fertig ist?
Vielen Dank schonmal
mintpc