Hallo!
Ich schreibe gerade ein Programm, dass Pakete vom Serialport auf mehrere Threads aufteilt, wobei jeder Thread nur die Pakete bekommt die für Ihn gedacht sind.
Werden neue Daten empfangen so, werden diese aufgeteilt, an die jeweilgen Threads verteilt und von ihnen konsumiert.
Ich habe dazu PipeStreams verwendet (bzw die Klassen AnonymousPipeServerStream und AnonymousPipeClientStream). PipeStreams schienen mir für die Aufgabe ideal, weil die Streams sich nicht aufblasen, sondern die Daten durch Lesen wieder aus dem Stream entfernt werden.
Leider bieten PipeStreams keine (mir bekannte) Möglichkeit TimeOuts (für's Lesen) zu unterstützen oder zu checken ob neue Daten vorhanden sind.
Ich kann nur mit den Methoden Read bzw. ReadByte arbeiten und die blockieren den ausführenden Thread.
Kann mir jemand einen Tipp geben, wie ich das umgehen kann oder eine andere Klasse vorschlagen mit der ich die Daten sauber an die anderen Threads versenden kann?
Die Kommunikation sollte nicht zu rechenlastig sein (möchte keine Queue verwenden). Aber vor allem sollten die Elemente nach dem Lesen automatisch aus dem Stream entfernt werden (wie auch beim Lesen vom Serialport).
Ich hab' von MemoryMappedFiles gehört, bin mir aber nicht sicher wie diese intern mit dem Speicher umgehen (können die gelesenen Bytes wieder entfernt
werden?).
Ich würde mich über Eure Anregungen freuen.
mfg,
Uffze
Ich schreibe gerade ein Programm, dass Pakete vom Serialport auf mehrere Threads aufteilt, wobei jeder Thread nur die Pakete bekommt die für Ihn gedacht sind.
Werden neue Daten empfangen so, werden diese aufgeteilt, an die jeweilgen Threads verteilt und von ihnen konsumiert.
Ich habe dazu PipeStreams verwendet (bzw die Klassen AnonymousPipeServerStream und AnonymousPipeClientStream). PipeStreams schienen mir für die Aufgabe ideal, weil die Streams sich nicht aufblasen, sondern die Daten durch Lesen wieder aus dem Stream entfernt werden.
Leider bieten PipeStreams keine (mir bekannte) Möglichkeit TimeOuts (für's Lesen) zu unterstützen oder zu checken ob neue Daten vorhanden sind.
Ich kann nur mit den Methoden Read bzw. ReadByte arbeiten und die blockieren den ausführenden Thread.
Kann mir jemand einen Tipp geben, wie ich das umgehen kann oder eine andere Klasse vorschlagen mit der ich die Daten sauber an die anderen Threads versenden kann?
Die Kommunikation sollte nicht zu rechenlastig sein (möchte keine Queue verwenden). Aber vor allem sollten die Elemente nach dem Lesen automatisch aus dem Stream entfernt werden (wie auch beim Lesen vom Serialport).
Ich hab' von MemoryMappedFiles gehört, bin mir aber nicht sicher wie diese intern mit dem Speicher umgehen (können die gelesenen Bytes wieder entfernt
werden?).
Ich würde mich über Eure Anregungen freuen.
mfg,
Uffze
Comment