Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Ereignis wird nicht ausgelöst

  Alt 14. Nov 2014, 00:17
Warum wurde der Debugger nicht benutzt, oder hat der dir wirklich nicht den Grund genannt?
Zitat:
Erste Gelegenheit für Exception bei $7534C42D. Exception-Klasse EListError mit Meldung 'Listenindex überschreitet das Maximum (3)'. Prozess ObjectInThread.exe (162412)
In Zeile Synchronize(FireOnEnde); . (Fehlerzeile im Debugger durch Synchronize verfälscht, aber mit Haltepunkt in ThreadEnde wäre man auch so an die Richtige Zeile gekommen, wenn man das nicht von selber erkennt "3 Mal klicken ... 0-2 ... ahhhhhh")

Das Programm zeigt die Exception natürlich nicht an, weil DU nicht die Exceptions im Thread behandelst.
Die VCL zeigt nur Exceptions im Hauptthread an und da auch nur die, welche nicht via Synchronize in andere Threads umgeleitet werden.

Grund, warum es beim 3. Klick knallt: if ID > 2 then
Zitat:
// Bei ID < 3 läuft alles durch. Es muss also Probleme beim Speichern geben.
Also, der erste Satz wurde gut erkannt, aber die Schlussfolgerung ist natürlich falsch, was der Debugger einem aber zeigen täte,
denn es knallt schon vor dem Speichern, beim Zugriff auf die Liste.

Zitat:
Delphi-Quellcode:
Inc(fObjectID);
lMyObject:=TMyObject.create(fObjectID);
Index:=fObjectList.Add(lMyObject);
Wieso bekommt das TMyObject eine andere ID einen anderen Index, als dann in ThreadEnde benutzt wird?

1: fObjectID=1 und Index=0 -> übersprungen
2: fObjectID=2 und Index=1 -> übersprungen
3: fObjectID=3 und Index=2 -> ID=Index 3 gibt es nicht -> *peng


Und wehe du kommst auf die Idee ID-1 zu rechnen.
Man benutzt keine unabhängigen/unsynchronisierten Zähler für eine gemeinsame Sache
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Nov 2014 um 00:48 Uhr)
  Mit Zitat antworten Zitat