Echtzeitprogrammierung in C++

Hi ich soll ein Programm in C++ schreiben welches Daten zugesendet bekommt und in eine andere Datei ausgibt bzw an ein andere DLL weitergibt. Soweit so gut. Nun soll das aber mehr oder weniger in Echtzeit programmiert werden. Sprich ich bekomme jede Sekunde korrekturdaten zugesendet und muss dann verschiedene Berechnungen mit machen und diese dann weiterleiten. Wie mach ich das das ich das jede Sekunde hinbekomme?
Danke schon mal im Vorraus fuer eure Hilfe
Impa

Hallo Impa,

Hi ich soll ein Programm in C++ schreiben welches Daten
zugesendet bekommt und in eine andere Datei ausgibt bzw an ein
andere DLL weitergibt. Soweit so gut. Nun soll das aber mehr
oder weniger in Echtzeit programmiert werden. Sprich ich
bekomme jede Sekunde korrekturdaten zugesendet und muss dann
verschiedene Berechnungen mit machen und diese dann
weiterleiten. Wie mach ich das das ich das jede Sekunde
hinbekomme?

  1. Wenn deine Berechnungen 2 Sekunden dauern: gar nicht !!
  2. Dein Betriebssystem ist C++ ???
  3. Am besten richtig.
  4. Dich erst einmal etwas mit den Grundlagen der Computer-technik vertraut machen. Also Bücher lesen und programmieren lernen.
  5. Warten bis Daten an der Schnittstelle anliegen und sie dann verarbeiten…

MfG Peter(TOO)

Hi,

Wie mach ich das das ich das jede Sekunde
hinbekomme?

Mit 2 Threads.

Der eine Thread nimmt nur die Daten
Entgegen und legt sie in einer
für der zweiten Thread verständlichen
Form auf der Platte ab. Der zweite
Thread macht die Berechnungen an
den Datensätzen, die da sind und
schickt sie danach weiter. Der
zweite Thread läuft mit niedriger
Priorität, sprich - der erste Thread
hat genug Ressourcen zur Verfügung,
um jede Sekunde zuverlässig die Daten
zu erhalten.

Alternativ macht man das auch gerne mit
zwei Programmen :wink:

Grüße

CMБ

Hallo,

zuerst müssen 2 Voraussetzungen gegeben sein:

  1. Der Rechner ist schnell genug, das überhaupt zu leisten, ohne in Rückstand zu geraten. Das sollte man immer prüfen, bevor man sinnlose Programmierarbeit investiert.

  2. Der Rechner selbst arbeitet mit einem Echtzeit-Betriebssystem. Unter Windows ist das nicht der Fall, und wenn etwa der Internet Explorer meint, er müsse eine Flash-Animation mit hoher Priorität abspielen, kommt die von dir geschreibene Software für längere Zeit überhaupt nicht an die Reihe. Besonders üble Beispiele dazu findet man auf den Webseiten von T-Com - mein Rechner meldet dann: „Ein Script auf dieser Seite verlangsamt stark die Flash-Animation“ anstatt umgekehrt, man sieht daran, dass unter Windows bewegte Bilder Vorrang haben vor ernsteren Aufgaben.

Das Programm selbst könnte im einfachsten Fall in einer Endlos-Schleife Daten entgegennehmen, umrechnen und wieder ausgeben. In einem bestimmten Umfang sorgt das Betriebssystem selbst dafür, dass eingehende Daten etwa von einer seriellen Schnittstelle nicht verlorengehen, indem sie zwischengepuffert werden.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Impa !

Unter Gnu-C++ sollte das mit der Funktion select() problemlos gehen. Die funktioniert da glaube ich nicht nur mit Sockets sondern mit allen Streams, also auch mit stdin.
Schau dir das mal im Online-Help an:
http://www.gnu.org/software/libc/manual/html_node/in…

mfg
Christof

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  1. Der Rechner ist schnell genug, das überhaupt zu leisten,
    ohne in Rückstand zu geraten. Das sollte man immer prüfen,
    bevor man sinnlose Programmierarbeit investiert.

  2. Der Rechner selbst arbeitet mit einem
    Echtzeit-Betriebssystem. Unter Windows ist das nicht der Fall,
    und wenn etwa der Internet Explorer meint, er müsse eine
    Flash-Animation mit hoher Priorität abspielen, kommt die von
    dir geschreibene Software für längere Zeit überhaupt nicht an
    die Reihe. Besonders üble Beispiele dazu findet man auf den
    Webseiten von T-Com - mein Rechner meldet dann: „Ein Script
    auf dieser Seite verlangsamt stark die Flash-Animation“
    anstatt umgekehrt, man sieht daran, dass unter Windows bewegte
    Bilder Vorrang haben vor ernsteren Aufgaben.

Das könnte man auch mit einer zwei Processormaschine übergehen!
Bei den meisten kritischen echtzeitanwendungen die ich kenne, wird ein Rechner mit zwei Prozessoren verwendet und einer nur für diese Application reserviert!

Ist halt wieder eine Frage von den Mitteln :wink:

Das könnte man auch mit einer zwei Processormaschine
übergehen!
Bei den meisten kritischen echtzeitanwendungen die ich kenne,
wird ein Rechner mit zwei Prozessoren verwendet und einer nur
für diese Application reserviert!

Ist halt wieder eine Frage von den Mitteln :wink:

Hallo,

das hiesse ja, umgekehrt betrachtet, ich schaffe mir einen zweiten Prozessor an, um ohne Störungen die blöden Animationen der Telekom betrachten zu können - nur über meine Leiche.

Gruss Reinhard

Also auf einen Rechner, der Echtzeitberechnungen macht, wird nicht gesurft! :stuck_out_tongue:
Und ich hätte gesagt, du schaffst dir einen zweiten Prozessor an um von allen anderen Anwendungen nicht gestört zu werden, wie z.B. AV,FireWall, Statistikberechnungen, Sicherungen, vllt. Datenbanken, Webserver, RemoteDesktop, etc.

Gruss Matthias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Und ich hätte gesagt, du schaffst dir einen zweiten Prozessor
an um von allen anderen Anwendungen nicht gestört zu werden,
wie z.B. AV,FireWall, Statistikberechnungen, Sicherungen,
vllt. Datenbanken, Webserver, RemoteDesktop, etc.

Und sowas gehört auf einen Rechner für Echtzeitanwendungen? Wenn man schon konsequent ist, dann sollte man das alles übers Netzwerk delegieren und nur einen ssh-Server auf dem Echtzeitrechner laufen lassen - schliesslich können dir diese ganzen Anwendungen dein RAM vollschreiben, dann fängt er das swappen an, und dann ist es aus und vorbei mit Echtzeit :wink:

Grüße,
Moritz