Das System läuft prinzipiell auch sehr gut.
Wenn es sekundenlang hängt, ist nicht
sehr gut
Ich
vermute mal, dass dein Hauptproblem ist, dass die Synchronisationsnachrichten gegenüber den "interaktiven" Nachrichten bevorzugt werden* und schlage folgendes vor:
- Jeder Thread kann sich in eine eine threadsichere Queue eintragen, wenn der Thread etwas synchronisiertes machen möchte.
- Der Thread schickt bei Wunsch, etwas synchronisiertes zu machen, eine niedrig-priore Nachricht an den Hauptthread.
- Der Hauptthread kann, wenn er diese Nachricht erhält, die Queue abarbeiten und (mit CriticalSections gesicherte) Aktualisierungsprozeduren des Threads aufrufen.
Damit erreichst du, das du das Abarbeiten der "synchronisierten" Proceduren selbst kontrollierst und das nur passiert, wenn gerade Zeit ist.
Ob du das machen willst und dir damit das ganze Synchronisationszeug auf die Seele ziehst, ist natürliche deine Entscheidung
* Kann das jemand bestätigen oder verneinen? Man könnte das ja erstmal in einem Prototyp testen.