LabVIEWForum.de
Priorität zweier While-Schleifen oder Alternativvorschlag - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Priorität zweier While-Schleifen oder Alternativvorschlag (/Thread-Prioritaet-zweier-While-Schleifen-oder-Alternativvorschlag)



Priorität zweier While-Schleifen oder Alternativvorschlag - Siebenstein - 22.06.2009 16:26

Hallo liebe LabVIEW-Nutzer,

ich habe ein Programm (LV8.6 )geschrieben welches aus zwei while-schleifen besteht. Die eine Schleife ist zur Datenerfassung (Sound Input Read) und die andere zur Weiterverarbeitung. Die Übergabe der Daten erfolgt mit einem Melder.

Nun ist es so, dass die Verarbeitung - je nach Inhalt der erfassten Daten - sehr viel Prozessorleistung benötigt. In der Erfassung kann es im ungünstigsten Fall dann zu Aussetzern kommen. Ich möchte aber dass auf JEDEN FALL die Daten weiter zuverlässig erfasst werden. Die Verarbeitung ist hingegen nicht so wichtig und darf in einem solchen Fall rühig etwas länger brauchen und ein Soundintervall (am Melder) verpasst.

Wie kann ich dies Umsetzen? Gibt es eine Möglichkeit der einen Schleife eine höhere Priorität zuzuweisen, so dass diese kuntinuierlich abgearbeitet wird und nur in den Leerlaufphasen (z.B. beim Warten auf den nächsten Soundabschnitt) die andere abgearbeitet wird? Oder ist hier eine Zeitgesteuerte Whileschleife sinnvoll?

Für Tipps bedank ich mich im Voraus.


Priorität zweier While-Schleifen oder Alternativvorschlag - eg - 22.06.2009 16:30

Du kannst statt Melder eine Queue benutzen, somit ist erstens Datenverlust weg. Zweitens, du kannst eine minimale Wartezeit in die Schleife mit niedriger Priorität einfügen. Drittens, du kannst die Verarbeitung auf einen anderen Prozessor übertragen (geht mit Zeitgesteuerten Schleifen). Viertens, wenn dein PC so schwach ist, musst du dir ein besseres zulegen. Fünftens, versuche deine Verarbeitung zu optimieren, damit sie nicht so viel CPU frisst.
CPU Auslastung von mehr als 10% deutet auf schlechte Programmierweise, oder das Programm ist wirklich so komplex, dann ist halt der PC dazu ungeeignet.


Priorität zweier While-Schleifen oder Alternativvorschlag - Lucki - 22.06.2009 19:52

Hier gibt es ein gute Nachricht: Heute haben auch die billigsten PC einen Doppelkern-Prozesser, und bei so einer Struktur wie Du sie hast, werden die beiden Schleifen in der Regel in verschiedenen Kernen ausgeführt. Ein Rechen-Engpass in der einen Schleife behindert also nicht unbedingt die Auführung in der anderen Schleife.
Von der Einführung von Waits würde ich unbedingt abraten. Man hat ja bereits zwei Waits:
In der Erzeugerschleife ist es das Warten auf neue Daten, z.B im DAQmx Read.
In der Verbraucherschleife ist es das Warten, bis wieder neue Daten in der Queue oder im Melder sind.
Es ist ein häufiger Fehler von Anfängern, daß sie darüber nicht richtig Bescheid wissen und glauben, in eine Schleife mit DAQmx Read oder in in eine Schleife für das Lesen aus einer Queue gehöre noch eine Waitfunktion hinein. Fange gar nicht erst damit an.

In der Verbraucherschleife, wenn die Rechenleistung nicht ausreicht, mußt Du dich für eine dieser Mögölichkeiten entscheiden müssen:[list]
[*]Benutzung einer Queue ganz normal:
Das ist dann sinnvoll, wenn im Durchschnitt die Rechenleitung ausreichend ist, und nur bei manchen Schleifendurchgängen die Zeit nicht aureicht. Dann füllt sich die Queue temporär an, es kommt aber auf Dauer nicht zum Puffer-Überlauf.<>
[*]Bei jedem Durchgang Entfernen aller Elemente aus der Queue, und, falls es wegen Zeitverzug mehrere sind, Verarbeitung aller Elemente in einer Iteration.<>
[*]Es wird immer nur das jüngste Element verarbeitet, ältere noch nicht verarbeitete Datenelemente werden weggeworfen.<>
[st]