![]() |
Blockende Kommunikation mit VCL?
Hallo,
ich habe ein kleines Delphiprogramm das ein externes Gerät über eine serielle Schnittstelle ansteuert. Auf Knopfdruck kann ich ein Kommando etwa so senden:
Delphi-Quellcode:
Schritt 2: Nun möchte ich aber auch die Antwort empfangen und auswerten, und habe dazu einen eigenen Thread der von der seriellen Schnittstelle liest, und darin eine Synchronize-Methode aufruft, um die empfangenen Daten anzuzeigen. Das klappt auch soweit gut.
procedure TForm1.OnButton1Click;
begin device.transfer("cmd1"); end; Schritt 3: Die Methode "transfer" soll blocken, bis etwas empfangen wurde, oder ein Timeout auftritt. Dazu habe ich in der Com-Klasse ein TEvent, auf welches ich nach dem senden mit .WairFor warte, und im Empfangsthread das Event setzte, auch das klappt soweit:
Delphi-Quellcode:
Schritt 4: Nun sollen noch Sende- und Empfangsdaten auf der MainForm angezeigt werden. Und hier kommt das Problem: Wenn ich in Transfer die Sendedaten auf der MainForm anzeige, werden die Daten erst angezeit wenn die Methode zurückkommt, und eigentlich müsste man ja den Zugriff auf den VCL Thread noch synchronisieren, aber selbiger ist ja gerade geblockt :?
procedure TForm1.OnButton1Click;
var msg: string; begin msg := device.transfer("cmd1"); ShowMessage(msg); end; function TDevice.transer(cmd: string): string; begin com.send(cmd); Event.WaitFor(1000); Result := RxThread.RxBuffer; end; procedure TRxThread.OnReceive; begin Event.SetEvent; end, Wie müsste ich das Design ändern um die beschriebene Funktionalität zu bekommen? Stefan |
AW: Blockende Kommunikation mit VCL?
Warum nicht mit fertiger Komponente z.B. TComport das ganze realisieren?
Was mir noch auffällt: 1. Showmessage muss der Anwender immer schließen. Warum nicht die Meldungen z.B. in ein Memo schreiben? 2. Rückmeldungen dann z.B. verwerfen, wenn NOW eine Startzeit + x überschreitet, dann braucht man kein waitfor. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz