grosse Menge von Daten speichern und abarbeiten?

mkrause

Grünschnabel
Hallo!

Ich moechte mit einem Porgramm eine sehr grosse Menge von Daten (bis zu 500 kByte pro Sekunde) aufnehmen und moeglichst in Real-Time auswerten. Dazu hatte ich vor die Daten mit einem Thread (mit hoher Prioritaet, damit keine Daten verloren gehen bzw. der DMA-Speicher der verwendeten Messkarte nicht ueberlaeuft) in einer Liste (mit list<int>) zu speichern, mit einem zweiten Thread (niedrigerer Prioritaet) dann die Daten abarbeiten.
Kann das so ueberhaupt zuverlaessig funktionieren oder muss ich da auf etwas besonderes achten (das ich nicht gleichzeitig in diese list lesen und schreiben darf habe ich in einem Vorversuch bei niedriger Datenmenge erfolgreich geloest)? Oder gibt es dafuer eine bessere/elegantere Methode? (irgendwo habe ich gelesen, dass Zugriffe auf list-Element recht langsam sind, aber ein Array mit dynamischer Groesse erschien mir etwas unpraktisch, oder?)

Bin dankbar fuer alle Tipps, Hinweise, Vorschlaege etc.! ;-)

markus
 
So wie es aussieht arbeitest du unter Windows. Und Windows ist nicht realtime fähig.
Du kannst NICHT sicherstellen, dass dein Thread innerhalb der geforderten Zeit die Daten deiner Messkarte abholt.

Allerdings wird Windows bei einer maximalen Priorität (=31) fast so gut. Nur dann hast du das Problem, dass alle anderen Prozesse/Threads so gut wie tot sind. Und Windows damit fast nicht mehr bedienbar.

Aber nichtsdestotrotz solltest du natürlich darauf achten, möglichst schnell die Daten zu holen und im Speicher abzulegen. Und das dauert mit einer dynamischen Liste natürlich länger als mit einem normalen Array.
Vielleicht solltest du hier mit Arrays arbeiten, die immer genau einen "Block" deines Messgerätes aufnehmen können oder ein mehrfaches davon.
Dann könntest du eine dynamsiche Verwaltung dieser Arrays und einen Ringpuffer bauen, der in der Grösse wachsen kann.
Das heisst: du legst (dynamisch) ein Array an für die Daten eines oder mehrere Blöcke.
Wenn du den nächsten Block liest und deine Verarbeitung ist noch nicht so weit und das Array ist voll, legst du ein weiteres Array an und schreibst die Daten dort hinein. Ansonsten überschreibst du das vorhandene Array.
Wenn du dann bereits mehrere Arrays angelegt hast, schreibst du in das erste wieder hinein, wenn deine Verarbeitung das erste nicht mehr benötigt, oder in das zweite oder ...

Dadurch wächst die Anzahl der verwendeten Arrays bis zu einer Maximalanzahl, die dadurch bestimmt wird, wie schnell deine Verarbeitung ist.
Und du brauchst nur eine kleine Verwaltung für die dynamisch angelegten Arrays.
 
Zurück