2016-03-24 2 views
0

Мне нужно получить 3 символа каждые 2 миллисекунды в цикле. Я использую SerialPort.Read(), но для чтения входящих данных требуется от 5 до 6 миллисекунд. Есть ли способ сделать это? Большое спасибо.Прочтите данные последовательного порта менее 2 мс в C#

+0

ли это зацикливание, как быстро насколько возможно? Если это так, скорее всего, последовательное соединение слишком медленное, а не ваш код. – Firearrow5235

+0

Только SerialPort.Read() занимает от 5 до 6 мс и даже не начинает обрабатывать входящие данные. – Jardo421

ответ

1

Вы можете вызвать последовательный порт в C++, https://stackoverflow.com/a/15795522/67566

Тогда вы можете позвонить, что из C#, https://msdn.microsoft.com/en-us/library/ms235281.aspx

Я ожидаю, что это будет быстрее, но вы будете иметь замедление в получении данные из C++ -> C#, а ваше окно 2-3 мс очень мало.

Вы можете получить данные в то время, я ожидаю, из C++, но вам может понадобиться его буферизировать, поэтому я бы поставил временную метку с каждой частью данных, а когда вы ее вызываете из C#, вам может понадобиться возвращают более одной части, а затем обрабатывают их.

В C++ DLL вам понадобится отдельный поток для чтения из последовательного порта.

Вы должны использовать класс thread, https://msdn.microsoft.com/en-us/library/hh920601.aspx и отсоединить его после создания.

И, наконец, вы хотите использовать безопасную очередь потоков, так что вы можете смотреть на эти две ссылки и выбрать, какой один вам больше нравится:

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

C++11 thread-safe queue

Смежные вопросы