2016-03-24 1 views
0

Je dois recevoir 3 caractères toutes les 2 millisecondes dans une boucle. J'utilise SerialPort.Read() mais il faut 5 à 6 milisecondes pour lire les données entrantes. Est-il possible de le faire? Merci beaucoup.Lire les données de port série en moins de 2 ms en C#

+0

Est-il Looping aussi vite possible? Si c'est le cas, il est probable que la connexion série soit trop lente et pas votre code. – Firearrow5235

+0

SerialPort.Read() seul prend de 5 à 6 ms et ne commence même pas à traiter les données entrantes. – Jardo421

Répondre

1

Vous pouvez appeler le port série en C++, https://stackoverflow.com/a/15795522/67566

Ensuite, vous pouvez appeler à partir de C#, https://msdn.microsoft.com/en-us/library/ms235281.aspx

Je pense que ce sera plus rapide, mais vous aurez un ralentissement à obtenir le les données de C++ -> C#, et votre fenêtre de 2-3 ms est très minuscule.

Vous pouvez obtenir les données dans ce délai, je suppose, à partir de C++, mais vous devrez peut-être le mettre en tampon, donc je mettrais un horodatage avec chaque donnée, et quand vous l'appelez de C#, vous devrez peut-être Renvoyez plus d'une pièce, puis traitez-les.

En C++ DLL, vous devez disposer d'un thread séparé pour la lecture à partir du port série.

Vous devez utiliser la classe thread, https://msdn.microsoft.com/en-us/library/hh920601.aspx et la détacher après la création.

Et enfin, vous voulez utiliser un fil file d'attente en toute sécurité, de sorte que vous pouvez regarder ces deux liens et choisir celui que vous aimez mieux:

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

C++11 thread-safe queue