Hmmh..
Ich weiss nicht genau was Du damit meinst.
TriggerAvail ist vergleichbar mit DataAvailable einer Socket Komponente.
Wenn Daten im Empfangsbuffer ankommen wird dieser Event ausgelöst.
Wieviele das sind hängt vom Sender, der Baudrate und den Einstellungen ab.
Wenn Du in diesem Event nun GetBlock ausführst erhältst Du den Inhalt des Buffers.
Danach wird dieser automatisch für den nächsten Event gelöscht.
Die erhaltenen Daten musst Du nun verarbeiten.
Also Pseudocode:
Delphi-Quellcode:
procedure MyComport.TriggerAvail(CP: TObject; Count: Word);
var
buffer :
array [0..4095]
of byte;
i : Integer;
s :
String;
begin
s := '
';
TApdComPort(CP).GetBlock(buffer, Count);
for i:=0
to Count-1
do
begin
// falls es ein Ascii Protokoll ist:
s := s+char(buffer[i])
end;
VerarbeiteString(s);
// oder kopiere den Inhalt des Buffers in einen temp Buffer und rufe eine Funktion auf um diesen zu verarbeiten.
end;
So verarbeiten wir die gesamte RS232 Kommunikation Ereignis gesteuert und hatten damit noch nie Probleme.
Allerdings glaube ich mich zu erinnern dass Du USB-RS232 wandelst oder sogar simulierst.
Kann sein dass die anfallenden Daten dann von der Kompenente gar nicht verabeitet werden können?
Keine Ahnung. Bis zur "normalen" Höchstrate von 115'200 Baud funktioniert das einwandfrei.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.