RE: Erzeuger/Verbraucher
Ich finde das einfügen einer wait Funktion aus folgendem Grund recht nützlich:
In der Erzeugerschleife muss sichergestellt sein, dass diese spätestens alle 20 ms ausgeführt wird.
Die Verbraucherschleife hingegen kann ruhig 500 ms versetzt aufgerufen werden um dort dann Daten
aus dem Puffer zu lesen und in einem Rutsch mehrere in das Diagramm zu schieben, so dass die Queue
wieder leer ist.
Der Vorteil der 500ms wait Funktion wäre meiner Meinung nach, dass die Erzeugerschleife die volle
Aufmerksamkeit von meinen beiden CPU Kernen erhält. Die Erzeugerschleife müsste sich also nur hin und wieder mal
die CPU Kerne mit den Systemprozessen von Windows teilen.
Zudem ist ja das Zeichnen von Diagrammen so CPU lastig, dass ich mir denke alle 500ms reicht aus.
Da während eines gesamten Versuchs eh nicht mehr als 3 MB an Daten erzeugt werden und ich 1 GB Arbeitsspeicher
zur Verfügung habe, wird die Queue eh nie so vollaufen, dass mir das Programmabstürzt.
Im schlimmsten Fall hätte die Queue dann im Arbeitsspeicher 3 MB gepuffert bevor sie in der Verbraucherschleife
angefangen werden im Diagramm zu verwerten.
Momentan hab ich ja das Problem, dass wenn ich Daten in einer Schleife von der Messkarte lese
und sie in derselben Schleife direkt in das Diagramm schreibe, ich die 20ms maximale
Schleifendurchlaufzeit manchmal nicht einhalten kann. Dadurch regelt die angeschlossene Maschine
falsch, da Werte zu später eingelesen werden. Dieses Problem muss irgendwie mit dem Zeichnen
des Diagramms zusammenhängen. Denn wenn das Diagramm nicht mitgezeichnet wird, sondern die
Werte lediglich direkt in eine Datei geschrieben werden, kann man sehen dass alle Werte
korrekt erfasst wurden. Sobald das Diagramm mitzeichnet kommt es aber zum Reglerproblem,
da die Schleife manchmal länger als 20ms für einen Durchlauf braucht und Werte dadurch zu spät erfasst werden.
|