LabVIEWForum.de - Laufender Puffer

LabVIEWForum.de

Normale Version: Laufender Puffer
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

wie war es noch mal mit dem begrenzten laufendem Puffer?

Ich habe eine Statusanzeige in Form einer Multicolumn Listbox. Dieser werden immer neue Logmeldungen als neues Arrayelement am Ende hinzugefügt. Die ersten Logmeldungen sollen aus der Anzeige (bzw. Array) verschwinden, wenn die Puffergröße überschritten wird. Ausserdem soll automatisch gescrollt werden (die 10 aktuellen Logmeldungen sollen immer angezeigt werden).

Ich habe es früher mit Build Array am Ende hinzugefügt, mit Array Size den Überlauf bestimmt und diesen überlauf mit Split Array abgeschnitten.
Nun klappt es mit Split Array nicht mehr, weil ich jetzt ein 2D Array habe, Split Array kann aber nur 1D Arrays abschneiden. Außerdem ist diese Methode nicht laufzeit- und speicher- optimal.

Noch mal die Frage: wie wird es mit dem Replace Array Subset gemacht? Die Puffergröße ist in dem Fall fest und nicht einstellbar. Das Array wird am Anfang vorinitialisiert.

eg
' schrieb:Ich habe es früher mit Build Array am Ende hinzugefügt, mit Array Size den Überlauf bestimmt und diesen überlauf mit Split Array abgeschnitten.
Nun klappt es mit Split Array nicht mehr, weil ich jetzt ein 2D Array habe, Split Array kann aber nur 1D Arrays abschneiden. Außerdem ist diese Methode nicht laufzeit- und

Kannst du evtl. statt nem 2D-Array ein "1D-Array of Cluster of 2 Elements" nehmen? Oder irgendwie was mit "ReplaceArraySubset" (ebenfalls von nem "1D-Array of Cluster of 2 Elements") + Rotate 1D-Array

Müsste mal überlegen...
Könntest du einen kleinen Beispiel posten? Ich weiss nicht wie ich aus dem Array Of Cluster wieder ein 2D-Array bekomme und verstehe auch nicht wozu Rotate dienen soll, ich will schiften, nicht rotaten.

Danke, eg
Ok, ich habe es spaltenweise gemacht, da ich nur 4 Spalten habe.

Irgendwelche Optimierungsvorschläge?

eg
Ok, autoscrollen mit jedem neuen Log muss ich ja nicht, da das aktuelle sowieso immer am Ende des Array ist. Somit ein Mal bei der Initialisierung des Programms scrollen reicht. Danach nur noch beim "Mouse leave" Event.
Das hat schon die CPU von 5% auf 1-2% gebracht (die Logs kommen ungefähr mit 10 Hz). Es ist aber immer noch zu viel.

Ich vermute die MCL ist echt stark reccourcenfressend. Was meint ihr dazu?

Ich habe mit einem C++ -ler gesprochen, er meint im MS VS gibt es einen Control, der aber eine Methode "Add Item" hat und die Speicherverwaltung übernimmt dieser Control für den User.

Gibt es nichts ähnliches in LV?

eg
' schrieb:Ich vermute die MCL ist echt stark reccourcenfressend. Was meint ihr dazu?
Hast du es auch mal einfach mit einem 2D-Array of Strings oder einem Table-Control versucht?

MfG, Jens
' schrieb:Hast du es auch mal einfach mit einem 2D-Array of Strings oder einem Table-Control versucht?

MfG, Jens


Nein, habe ich nicht. Ich wollte die Zeilen in unterschiedlichen Farben darstellen (a la JKI VI PM) und die Fehlermeldungen rot markieren. Das bietet ein Tabellencontrol nicht an.
Aber als ich moch mit Farben angefangen habe stieg die CPU gleich auf 20%. Ist es nicht schön?

eg
' schrieb:Nein, habe ich nicht. Ich wollte die Zeilen in unterschiedlichen Farben darstellen (a la JKI VI PM) und die Fehlermeldungen rot markieren. Das bietet ein Tabellencontrol nicht an.

Doch! Siehe Bild...

[attachment=8742]
' schrieb:Ich weiss nicht wie ich aus dem Array Of Cluster wieder ein 2D-Array bekomme

Hi,

ich meinte sowas...aber da kannst du natürlich deine Zeilen nicht unterschiedlich färben...dafür aber mit den 1D-Array-Funktionen (Split etc.) arbeiten

[attachment=8745]

' schrieb:und verstehe auch nicht wozu Rotate dienen soll, ich will schiften, nicht rotaten.

Das hast du ja jetzt schon verwendet...


Gruss
Achim
Referenz-URLs