Announcement

Collapse
No announcement yet.

SerialPort auf mehrere Threads aufteilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SerialPort auf mehrere Threads aufteilen

    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

  • #2
    Hallo,

    reicht IsMessageComplete?

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo gfoidl,

      Danke für die Antwort.

      IsMessageComplete geht leider nur wenn der TransmissionMode auf "Message" eingestellt ist. Ich will Binärdaten verteilen und verwende TransmissionMode "Byte" (IsMessageComplete liefert da eine Exception).

      mfg,
      Uffze

      Comment

      Working...
      X