LabVIEWForum.de
Laufender Puffer - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Laufender Puffer (/Thread-Laufender-Puffer)



Laufender Puffer - eg - 19.09.2007 14:11

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


Laufender Puffer - Achim - 19.09.2007 15:04

' 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...


Laufender Puffer - eg - 19.09.2007 15:51

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


Laufender Puffer - eg - 19.09.2007 16:32

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

Irgendwelche Optimierungsvorschläge?

eg


Laufender Puffer - eg - 19.09.2007 19:42

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


Laufender Puffer - jg - 19.09.2007 21:09

' 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


Laufender Puffer - eg - 19.09.2007 21:15

' 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


Laufender Puffer - Achim - 20.09.2007 06:12

' 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]


Laufender Puffer - Achim - 20.09.2007 06:37

' 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