Entwickler-Ecke

Sonstiges (Delphi) - Anwendung von APPLICATION.PROCESSMESSAGES bei 20 Hz Messung


deckert - Sa 15.02.03 17:36
Titel: Anwendung von APPLICATION.PROCESSMESSAGES bei 20 Hz Messung
Hallo Leute,

ich schreibe gerade Diplomarbeit in Meteorologie und habe ein Delphi Programm für Echtzeitdarstellung und Logggen von Meßdaten geschrieben.
Die Daten von einem Ultraschallanemometer und einem Krypton Hygrometer werden über eine serielle Schnittstelle direkt an einen Laptop übertragen.
Allerdings messe ich mit 20 Hz, es kommen pro Sekunde 20*3 Datenzeilen an meinem Laptop an.
Um die Anwendung von außen (nicht mit Interrupt CTRL+ALT+DEL) beenden zu können benötige ich die Prozedur APPLICATION.PROCESSMESSAGES. Diese macht jedoch das Programm für meine Anwendung zu langsam, es werden dann ASCI's verschluckt.

Habt Ihr einen Vorschlag, wie ich das Problem erschlagen könnte?

Vielen Dank
Rudi


Klabautermann - Sa 15.02.03 20:17

Hallo,

1. Poste deine Beiträge bitte in der Richtigen Rubrik, diese hier ist für neue FAQ Beiträge.

2. Da Windows kein Echtzeit Betriebssystem ist, wirst du bei deinem Problem keine 100% lösung hinbekommen.
Auf jeden Fall würde ich das Programm aber auf mehrere Threads verteilen. Mindestens auf einen Hauptthread und einen (mit hoher Priorität) der die Daten entgegennimmt.

Gruß
Klabautermann


Fred Ferkel - Mo 17.02.03 21:34

hi
k.A. wie dein prog aussieht und so aber wenn du das ganze in ner schleife abrufst könntest du doch einfach nen getasynckeystate() und nen break einfügen ??

cya


DaFox - Mo 17.02.03 22:03

Hi.

Evtl. nicht bei jedem Schleifendurchgang ProcessMessages aufrufen.

Bsp:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: Integer;
begin
  cnt := 0;
  for i := 1 to 2000 do
  begin
    if (i mod 100) = 0 then Application.ProcessMessages;
  end;
end;


Besser ist aber eindeutig mehrere Threads zu benutzen. Gerade bei Kommunikation mit (seriellen) Schnittstellen ist das sehr zu empfehlen aber auch sehr zeitaufwendig (ohne Thread-Erfahrung).

Gruß,
Markus