Vielen Dank für die Antworten!
Wichtig ist hierbei auch der Blick in die Dokumentation
TThread.Synchronize.
Zitat von
TThread.Synchronize:
Führt einen Methodenaufruf im Haupt-Thread aus.
Also egal von wo auch immer das ausgeführt wird, es wird synchron zum Hauptthread ausgeführt.
Wenig später heißt es jedoch:
Zitat:
Hinweis: Wenn Sie die statische Version der Methode Synchronize mit nil/NULL als der erste Parameter verwenden, wird die von AMethod referenzierte Methode im Haupt-Thread synchronisiert.
Das hatte ich bislang so interpretiert, als könnte ich mit der gleichnamigen Klassenmethode angeben, von welchem Thread aus der Aufruf tatsächlich stattfindet. Denn wozu gebe ich einen Thread sonst überhaupt als Parameter an?
Wichtig ist hier, das Synchronize so lange wartet, bis der Hauptthread sich drum kümmern kann. Es geht also Zeit flöten.
Gut (und beruhigend) zu wissen. Aber gerade hier beschleicht mich jetzt das Gefühl, dass ich meinen TThread noch mit irgendwas hätte ausstatten müssen, um darauf überhaupt (und auch wo) zu reagieren - Eine Art
kümmereDichUmSynchronize-AufrufeVonAnderenThreads()
.
Um kritische Abschnitte gibt es dann wohl wieder keinen Weg drum herum, ich möchte nicht, dass die Funktion "von außen" aufgerufen/angefordert wird, wenn der Thread selbst auch gerade in dieser Funktion wühlt. Jetzt bin ich mal gespannt, was
TCriticalSection
bereithält...