Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
Njain.
Ich sag mal so:
Du hast eine Komponente erstellt
und nur weil sie ein einem anderem Thread verwendet wird, ist sie damit nicht automatisch threadsave. :zwinker:
Das kommt dann drauf an, wie die Steuerung arbeitet und ob sie eventuell entsprechend abgesichert ist, also vorallem dein Setzen des Intervalls oder des Enable.
Das Free dagegen rufe man ja eh fast immer aus einem anderem...
Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
Ja, das Break verlässt die Schleife und das Exit auch.
Im Grunde wollte ich nur sagen, daß die Execute-Methode bei allen 3. Varianten verlassen (Exit sagt das nur deutlicher, zum Programmierer) und der Thread beendet wird. :angel:
Jupp, genau das.
Ob der TJvThreadTimer threadsave ist, weiß ich nicht, aber ich glaub das "Thread" im Namen sagt erstmal nur aus, wie er intern arbeitet.
...
Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
TTimer oder ein eigenes MessageOnlyWindow+SetTimer bringt nichts, solange die "komplette" Bahandlung nicht auf einen der beiden Threads beschränkt wird.
Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
Siehe hatte es auch grade noch so gesehn und meinen Beitrag oben erweitert.
Vorallem das Fette und Nachfolgendes.
Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
:gruebel:
Nachdem ein Thread beendet wurde, wird dessen MessageQueue gelöscht (falls er Eine hat), kurz davor die verknüpften Windows (vermute ich mal) und man kann an ihn dann auch keine Message mehr senden. (eigentlich)
Falls meine "Vermutung" nicht stimmt, dann würden die Windows ja in der Luft hängen, da ihre Messages immer nur im verknüpften Thread abgearbeitet werden. (Dem, wo das...
Forum: Object-Pascal / Delphi-Language
by himitsu,
20. Jun 2014
Die Fehlerstelle ist hier eine Zeile vorher, denn leider zeigt der Debugger die Position der Rücksprungadresse an.
Der Fehler ist also in dem CALL aufgetreten, bzw. in der aufgerufenen Methode.
Dem würde ich mal zustimmen.
In welchem Thread-Kontext liegt das denn? (würde zwar MainThread vermuten, aber kann nicht schaden mal nachzusehn -> Thread-Status)
Forum: Object-Pascal / Delphi-Language
by himitsu,
19. Jun 2014
Du hast jetzt das Free weggemacht und das OwnObjects auch und das FreeOnTerminate ist ebenfalls nicht aktiv?
Es gibt also nur noch das Delete in der Liste.
Nja, dann hast du den Thread-Zeiger nun aus der Liste, aber die Thread-Instanz gammelt als Speicherleck immernoch im Programm rum.
Einwas davon mußt du schon noch machen (nur Eines und nicht Mehreres).
Forum: Object-Pascal / Delphi-Language
by himitsu,
19. Jun 2014
Entweder du sagst der Objektliste die soll das löschen (OwnsObjects) und selber löschst du das nicht mehr,
wobei hier das Delete die TThread-Instance löscht.
Aber wenn du das unbedingt selber löschen willst, dann darf entwedet die Liste das nicht automatisch löschen (kein OwnsObjects)
oder du mußt den "ungültigen" Zeiger via TObjectList.Extract rausholen.