2016-03-24 5 views
0

Ich brauche alle 2 Millisekunden in einer Schleife 3 Zeichen. Ich verwende SerialPort.Read(), aber es dauert 5 bis 6 Millisekunden, um eingehende Daten zu lesen. Gibt es einen möglichen Weg dazu? Vielen Dank.Lesen Sie serialport Daten in weniger als 2ms in C#

+0

Ist Looping es so schnell wie möglich? Wenn dem so ist, ist es wahrscheinlich die serielle Verbindung, die zu langsam ist, und nicht Ihr Code. – Firearrow5235

+0

SerialPort.Read() allein dauert 5 bis 6 ms und es beginnt nicht einmal eingehende Daten zu verarbeiten. – Jardo421

Antwort

1

Möglicherweise möchten Sie die serielle Schnittstelle in C++ nennen, https://stackoverflow.com/a/15795522/67566

Dann können Sie das von C# aufrufen, https://msdn.microsoft.com/en-us/library/ms235281.aspx

Ich erwarte, dass dies schneller sein, aber Sie werden eine langsame haben unten die in immer Daten von C++ -> C#, und Ihr Fenster von 2-3 ms ist sehr klein.

Sie können die Daten in dieser Zeit, ich erwarte, aus C++, aber Sie müssen möglicherweise Puffer, so würde ich einen Zeitstempel mit jedem Stück von Daten, und wenn Sie es aus C# aufrufen, müssen Sie möglicherweise gib mehr als ein Stück zurück und bearbeite sie dann.

In C++ DLL möchten Sie einen separaten Thread für das Lesen von der seriellen Schnittstelle haben.

Sie möchten die Klasse thread, https://msdn.microsoft.com/en-us/library/hh920601.aspx verwenden und nach der Erstellung trennen.

Und schließlich werden Sie einen Thread sichere Warteschlange verwenden möchten, so können Sie an diesen beiden Links aussehen und welches mögen Sie besser wählen:

https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/

C++11 thread-safe queue

Verwandte Themen