habe ich nicht ganz verstanden. (...)
Wo ist bei mir die Sicherheitslücke?
Was ich meinte: Angenommen wir nutzen unsere Sperre nicht nur für das Setzen des Wertes sondern auch führ das Ausführen der Events, also z.B. der Aktualisierung deines Formulars. Aus
Delphi-Quellcode:
Sperre.Betreten()
try
wert = neuer wert
finally
Sperre.Verlassen()
end;
wird also
Delphi-Quellcode:
Sperre.Betreten()
try
wert = neuer wert
Wenn der Wert sich geändert hat:
Führe OnChange aus
finally
Sperre.Verlassen()
end;
Und dein "OnChange" ist
gleichzeitig auch noch dass wir mit
TThread.Synchronize(..)
hantieren (davon hatte ich ja stark abgeraten).
Dann kann es sein dass du in deiner Ereignisbehandlung (also auf deinem Formular) einen Getter oder Setter vom Thread aufrufst. Niemand kann dich daran hindern. Nur was passiert dann? Er will wieder sperren. Und darauf wird er ewig warten, denn der Thread hält es noch gesperrt und wartet darauf dass der
TThread.Synchronize(..)
fertig wird. Der wird aber nie fertig, da er auf die Sperre wartet. Eine Verklemmung auf ewig.
Das meinte ich.
Weiterhin ist es denke ich unnötig dass der Thread so lange pausiert und wartet bis jemand darauf reagiert hat. Deine serielle Kommunikation würde nun so lange stehen bis das Gepinsel auf dem Formular fertig ist.