Servus zusammen,
ich habe eine singlethreaded Anwendung, die sich mit einem embedded Device per RS232 unterhält.
Die periodische Abfrage lasse ich mit einer TTimer Komponente laufen, d.h. per Button initiiere ich Login, damit wird der TTimer gestartet und fragt ab dann ständig Werte per RS232 ab. Das Protokoll ist PingPong, d.h das embedded Device reagiert nur auf Anfrage durch das Delphi-Prg. mit einer Antwort:
1.Kommando - 1.Antwort - 2.Kommando - 2.Antwort - 3.Kommando - 3.Antwort...
Ich bin bisher davon ausgegangen, dass der Timer meine Delphi-Anwendung solange unterbricht, bis die Timerroutine fertig ist.
Also wie bei einer ISR.
Ein Logout iniitiere ich ebenfalls per Button.
Es kommt nun recht häufig vor, dass die Timerroutine ein Kommando absetzt und bevor die Antwort vollständig eintraf durch einen Druck auf den Logout-Button ein Logout-Kommando abgesetzt wurde. In dem Moment ist das PingPong hinüber: n.Kommando - n+1.Kommando - Müllantwort.
Somit habe ich ein Sychronisationsproblem. TCriticalSection funktioniert wohl nicht, da Hauptapp. und TTimer auf demselben Thread arbeiten.
Hat jemand eine Idee, wie ich das synchronisiert bekomme?
Thanx, Arne